Typescript版本3中出现编译器错误,但版本2中没有

时间:2018-08-29 15:22:55

标签: typescript

自从将Typescript更新为3.x以来,我无法再编译此类:

class MyClass<T>{
    private myMethods: [(val: T) => void] = [] as [(val: T) => void];
}

更具体地说,是触发错误的[] as [(val: T) => void]和编译器消息是:

Error:(7, 47) TS2352: Type '[]' cannot be converted to type '[(val: T) => void]'.
  Property '0' is missing in type '[]'. 

它确实可以在Typescript 2.9.2中工作!

那么这里的问题是什么,我该如何解决?

2 个答案:

答案 0 :(得分:1)

这是由于TypeScript 3.0中的元组长度强制实施,该签名强制签名int在类型UIDataIterator的数组中具有一个元素。

唯一的解决方案是使元素类型为可选,如下所示。

[T]

答案 1 :(得分:1)

如果myMethods不是元组而是数组(顾名思义,),您可以做

class MyClass<T>{
    private myMethods: Array<(val: T) => void> = [];
}