typescript函数接口定义中的可变参数数量0.9.5

14 浏览
0 Comments

typescript函数接口定义中的可变参数数量0.9.5

我有一个场景,文件名为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: 无法将'(testparam: any, para1: any) => boolean'转换为'Itest':
    类型'(testparam: any, para1: any) => boolean'的调用签名与'Itest'不兼容:
        调用签名只能接受1个或更少的参数。
t.ts(7,8): error TS2012: 无法将'(testparam: any, para1: any, para2: any) => boolean'转换为'Itest':
    类型'(testparam: any, para1: any, para2: any) => boolean'的调用签名与'Itest'不兼容:
        调用签名只能接受1个或更少的参数。
t.ts(14,8): error TS2012: 无法将'(testparam: any, para1: any, para2: any) => boolean'转换为'Itest2':
    类型'(testparam: any, para1: any, para2: any) => boolean'的调用签名与'Itest2'不兼容:
        调用签名只能接受2个或更少的参数。

是我漏掉了什么还是这个有问题?在0.9.1.1版本中它是有效的。谢谢!

0
0 Comments

在 TypeScript 0.9.5 版本中,出现了一个关于函数接口定义中可变参数的问题。具体原因是由于 rest 参数是可选的,在函数中也需要将其设置为可选。解决方法是在函数接口定义中使用可选参数语法。

在代码示例中,首先定义了一个名为 Itest 的接口,该接口包含一个 event 参数和一个 rest 参数 args,返回类型为 any。接着,定义了三个变量 t1、t2 和 t3,它们都是 Itest 类型的变量。其中 t1 只接受一个可选参数 testparam,返回值为 true;t2 接受两个可选参数 testparam 和 para1,返回值为 true;t3 接受三个可选参数 testparam、para1 和 para2,返回值为 true。

接下来,定义了一个名为 Itest2 的接口,该接口包含一个 event 参数和一个 para1 参数,以及一个 rest 参数 args,返回类型为 any。然后,定义了两个变量 t4 和 t5,它们都是 Itest2 类型的变量。其中 t4 接受两个参数 testparam 和 para1,返回值为 true;t5 接受三个参数 testparam、para1 和 para2,返回值为 true。

在 TypeScript 0.9.5 版本中引入了这个特性,它使得使用 REST 对象来传递参数比使用可变参数更加简洁。因为使用可变参数时,你只能通过整数位置来访问参数,而不能使用属性/变量的名称,这容易出错、难以阅读,并且无法使用接口来进行类型检查。所以,在 JavaScript 中,我们不需要使用可变参数,因为它已经原生支持 REST 对象。

在 TypeScript 0.9.5 版本中,引入了函数接口定义中可变参数的特性。为了使 rest 参数是可选的,需要在函数接口定义中使用可选参数语法。相较于使用可变参数,使用 REST 对象传递参数更加简洁易读,并且可以通过接口进行类型检查。因此,在 JavaScript 中,不再需要使用可变参数,因为它已经原生支持 REST 对象。

0