TypeScript版本2.4.2,使用--target ES6
编译
代码行:
var coins: { coin: number}[] = [1,1,1]
导致TypeScript抛出
错误TS2322:类型“number[]”不能分配给类型{coin:number;}[]'
然而,线路:
var coins: { coin: number}[] = Array(3).fill(1)
编译成功,没有错误。
这是TypeScript错误,还是预期行为(不是以这种方式声明的数组的类型检查)?。如果是,为什么?
问题是Array(3)
创建一个长度为3的数组并键入any[]
然后填充
对该数组进行操作。由于any
可以分配给任何类型,因此any[]
也可以分配给任何其他类型的数组(包括{coin: number}
)
如果要为数组指定类型参数,则会出现错误:
var coins: { coin: number}[] = Array<{ coin: number}>(3).fill(1) // 1 is not assignable to { coin: number}
遗憾的是,没有办法防止省略数组的类型参数。
TypeScript中非抽象类(非抽象构造函数)的类型签名如下: 这也称为可更新类型。但是,我需要一个抽象类(抽象构造函数)的类型签名。我理解它可以定义为具有类型,但这太宽泛了。难道没有更精确的替代方案吗? 编辑: 为了阐明我的意思,下面的小片段演示了抽象构造函数和非抽象构造函数之间的区别: 类型'typeof实用程序'不能分配给类型'new(... args: any[])= 无法将抽象构造函数
本文向大家介绍TypeScript 运行时类型检查补充工具,包括了TypeScript 运行时类型检查补充工具的使用技巧和注意事项,需要的朋友参考一下 TypeScript是静态类型系统,在编译时做类型检查。一般而言,如果项目所用到的所有库、模块都是基于ts的,那么静态类型已经可以避免大部分编程层面的类型问题。不过,在一些场景下来,单纯静态类型是无法解决问题的,部分数据是动态传入到系统中的,主要包
第一种instanceof Array 来检测数组 if(value instanceof Array){ //数组操作 } 第二种使用Array.isArray()来检测数组 if(Array.isArray(value)){ //数组操作 }
我有一个类,它有一些属性/方法,返回最初通过构造函数传递的值: 人们建议用泛型作为打字稿的等价物: 现在我有了一个子类,它调用超类的构造函数并传递以下选项: TypeScript编译器对此不满意,希望通过类型扩展Base类。但是我有两次信息,在超级呼叫和扩展符号中。什么是正确的ts语法来解决我的问题? (键入脚本中的代码)
由于 Array 的构造函数在如何处理参数时有点模棱两可,因此总是推荐使用数组的字面语法 - [] - 来创建数组。 [1, 2, 3]; // 结果: [1, 2, 3] new Array(1, 2, 3); // 结果: [1, 2, 3] [3]; // 结果: [3] new Array(3); // 结果: [] new Array('3') // 结果: ['3'] // 译者