【问题标题】:typescript variable number of parameters in function interface definition 0.9.5打字稿变量函数接口定义中的参数个数0.9.5
【发布时间】:2013-12-28 13:43:45
【问题描述】:

我有这个场景,文件是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 中工作。谢谢!

【问题讨论】:

标签: typescript


【解决方案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 中的新功能

【讨论】:

  • 以 REST 格式传递一个对象实际上比使用可变参数要干净得多,因为使用可变参数你有整数位置而不是属性/变量的名称,这很容易搞砸,更难阅读,并且不可能有一个界面来检查你是否想要。因此,您不需要可变参数,因为 javascript 本身会执行 REST 对象。
猜你喜欢
  • 2013-01-26
  • 1970-01-01
  • 1970-01-01
  • 2021-02-15
  • 2021-11-13
  • 1970-01-01
  • 2021-02-20
  • 1970-01-01
相关资源
最近更新 更多