如何在TypeScript的对象内定义字符串数组?
问题解答
第一个报错的原因
当你写bar: []时,TypeScript的类型推断会判定这个数组永远不会包含任何元素,因此推断出的类型是never[]。往never[]类型的数组中push字符串,必然会触发类型不匹配的错误。
第二个写法错误的原因
你写bar: Array<string>时,误将Array<string>这个类型标识当成了值来赋值。实际上Array<string>是类型定义,你需要给bar赋值的是数组实例,而非Array构造函数本身。此时bar存储的是Array构造函数,它本身并没有push方法,所以会报错。
无需提取变量的简洁写法
不用把数组单独提取成变量,有几种直接在对象内定义类型的方法:
- 类型断言:直接给空数组断言为
string[]
let foo = { bar: [] as string[] }; foo.bar.push("Hello World!");
- 显式标注对象类型:给
foo明确类型定义,指定bar为string[]
let foo: { bar: string[] } = { bar: [] }; foo.bar.push("Hello World!");
- 直接创建指定类型的数组实例:使用
new Array<string>()创建字符串数组实例
let foo = { bar: new Array<string>() }; foo.bar.push("Hello World!");
内容的提问来源于stack exchange,提问作者Edito
相关产品推荐
相关产品推荐

