自从将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中工作!
那么这里的问题是什么,我该如何解决?
答案 0 :(得分:1)
这是由于TypeScript 3.0中的元组长度强制实施,该签名强制签名int
在类型UIDataIterator
的数组中具有一个元素。
唯一的解决方案是使元素类型为可选,如下所示。
[T]
答案 1 :(得分:1)
如果myMethods
不是元组而是数组(顾名思义,),您可以做
class MyClass<T>{
private myMethods: Array<(val: T) => void> = [];
}