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

新手上路,请多包涵

我正在 TypeScript 中创建简单的逻辑游戏,称为“犯罪之三”。

尝试在 TypeScript 中预分配类型化数组时,我尝试执行以下操作:

 var arr = Criminal[];

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

也试过这样做

var arr : Criminal = [];

这产生了“无法将任何 [] 转换为 ‘Criminal’

执行此操作的“TypeScript”方法是什么?

原文由 darethas 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 783
2 个回答

现有的答案错过了一个选项,所以这里有一个完整的列表:

 // 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 构造函数只会在这个特定用例中对您有所帮助,但我个人认为它最易读。但是,在运行时会有轻微的 性能影响*。此外,如果有人疯狂到重新定义 Array 构造函数, 其含义可能会改变

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

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

原文由 Thorarin 发布,翻译遵循 CC BY-SA 3.0 许可协议

请试试这个对我有用的。

 return [] as Criminal[];

原文由 Zhihong LU 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏