TypeScript:创建一个空的类型化容器数组

2022-08-30 00:14:24

我正在TypeScript中创建名为“Three of a Crime”的简单逻辑游戏。

当尝试在TypeScript中预分配类型化数组时,我试图做这样的事情:

var arr = Criminal[];

这给出了错误“检查表达式项的格式”。

也试过这样做

var arr : Criminal = [];

这产生了“不能将任何[]转换为'罪犯'

什么是“TypeScript”方法来做到这一点?


答案 1

现有答案缺少一个选项,因此这里有一个完整的列表:

// 1. Explicitly declare the type
var arr: Criminal[] = [];

// 2. Via type assertion
var arr = <Criminal[]>[];
var arr = [] as Criminal[];

// 3. Using the Array constructor
var arr = new Array<Criminal>();
  1. 显式指定类型是变量声明的类型推断失败时的一般解决方案。

  2. 使用类型断言(有时称为强制转换,但它在 TypeScript 中并不是真正的强制转换)的优点适用于任何表达式,因此即使没有声明变量也可以使用它。类型断言有两种语法,但如果您关心这一点,只有后者才能与JSX结合使用。

  3. 使用 Array 构造函数只会在这个特定的用例中为您提供帮助,但我个人认为它最易读。但是,运行时*会对性能产生轻微影响。此外,如果有人疯狂地重新定义数组构造函数,其含义可能会改变

这是个人喜好的问题,但我发现第三个选项最易读。在绝大多数情况下,提到的缺点可以忽略不计,可读性是最重要的因素。

*: 有趣的事实;在撰写本文时,Chrome的性能差异为60%,而在Firefox中则没有可衡量的性能差异。


答案 2

由于数组文本语法,在TypeScript中正确预分配类型化数组的问题有些模糊,因此它并不像我最初想象的那么直观。

正确的方法是

var arr : Criminal[] = [];

这将为您提供一个正确键入的空数组,存储在变量'arr'中

希望这有助于其他人!