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

2020/10/19 02:41 · javascript ·  · 0评论

我正在用TypeScript创建一个简单的逻辑游戏,叫做“犯罪三人”。

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

var arr = Criminal[];

出现错误“检查表达式项的格式”。

也尝试这样做

var arr : Criminal = [];

而这产生了“无法将any []转换为'Criminal'

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

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

// 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中没有可测量的性能差异。

由于数组文字语法,在TypeScript中正确预分配类型化数组的问题在某种程度上被掩盖了,所以它不像我最初想到的那样直观。

正确的方法是

var arr : Criminal[] = [];

这将为您提供存储在变量“ arr”中的正确类型的空数组

希望这对别人有帮助!

我知道这是一个老问题,但是最近我遇到了类似的问题,这种问题无法用这种方法解决,因为我必须返回一个特定类型的空数组。

我有

return [];

这里[]Criminal[]类型。

return: Criminal[] [];没有return []: Criminal[];为我工作,没有为我工作。

乍看之下,我通过在返回值之前创建一个类型化变量(如您所正确报告的)来解决它,但是(我不知道JavaScript引擎如何工作)它可能会产生开销,并且可读性较差。

为了彻底,我也将在答案中报告此解决方案:

let temp: Criminal[] = [];
return temp;

最终,我发现了TypeScript类型转换,这使我能够以更简洁,可读性更好(也许更有效)的方式解决问题:

return <Criminal[]>[];

希望这对以后的读者有所帮助!

对于公共访问,如下所示:

public arr: Criminal[] = [];
本文地址:http://javascript.askforanswer.com/typescriptchuangjianyigekongdeleixinghuarongqishuzu.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!