我有这个场景,文件是t.ts:
interface Itest{
(event: any, ...args: any[]):any;
}
var t1: Itest = function (testparam) { return true;};
var t2: Itest = function (testparam, para1) { return true; };
var t3: Itest = function (testparam, para1, para2) { return true; };
interface Itest2 {
(event: any, para1,...args: any[]): any;
}
var t4: Itest2 = function (testparam, para1) { return true; };
var t5: Itest2 = function (testparam, para1, para2) { return true; };
当我用 tsc 0.9.5 编译它时,我得到以下错误:
tsc --target ES5 "t.ts"
t.ts(6,8): error TS2012: Cannot convert '(testparam: any, para1: any) => boolean' to 'Itest':
Call signatures of types '(testparam: any, para1: any) => boolean' and 'Itest' are incompatible:
Call signature expects 1 or fewer parameters.
t.ts(7,8): error TS2012: Cannot convert '(testparam: any, para1: any, para2: any) => boolean' to 'Itest':
Call signatures of types '(testparam: any, para1: any, para2: any) => boolean' and 'Itest' are incompatible:
Call signature expects 1 or fewer parameters.
t.ts(14,8): error TS2012: Cannot convert '(testparam: any, para1: any, para2: any) => boolean' to 'Itest2':
Call signatures of types '(testparam: any, para1: any, para2: any) => boolean' and 'Itest2' are incompatible:
Call signature expects 2 or fewer parameters.
我是不是遗漏了什么或者这个坏了?它曾经在 0.9.1.1 中工作。谢谢!
最佳答案
由于其余参数是可选的,因此您也需要在函数中将它们设为可选:
interface Itest{
(event: any, ...args: any[]):any;
}
var t1: Itest = function (testparam?) { return true;};
var t2: Itest = function (testparam?, para1?) { return true; };
var t3: Itest = function (testparam?, para1?, para2?) { return true; };
interface Itest2 {
(event: any, para1,...args: any[]): any;
}
var t4: Itest2 = function (testparam, para1) { return true; };
var t5: Itest2 = function (testparam, para1, para2?) { return true; };
这是 TS0.9.5 中的新内容
关于函数接口(interface)定义0.9.5中参数的typescript变量数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20504670/