TypeScript:创build一个空的types容器数组

我正在用TypeScript创build一个简单的逻辑游戏“三个犯罪”。

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

var arr = Criminal[]; 

这给出了错误“检查expression式的格式”。

也试过这样做

 var arr : Criminal = []; 

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

什么是“打字稿”的方式来做到这一点?

在TypeScript中正确地预先分配一个types数组的问题由于数组字面量的语法而被模糊了,所以它不像我第一次想到的那样直观。

正确的方法是

 var arr : Criminal[] = []; 

这会给你一个正确的types,存储在variables“arr”

希望这可以帮助别人!

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

 // 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. 明确指定types是每当types推断对variables声明失败时的一般解决scheme。

  2. 使用types断言 (有时称为cast,但它不是TypeScript中的强制types)的优点是适用于任何expression式,所以即使没有声明variables,也可以使用它。 对于types断言有两种语法,但只有后者才能与JSX结合使用,如果你关心的话。

  3. 使用数组构造函数只会帮助你在这个特定的用例,但我个人认为最可读的。 但是,在运行时会有轻微的性能影响 *。 另外,如果有人疯了,重新定义数组构造函数, 其含义可能会改变 。

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

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

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

我有

 return []; 

其中[]Criminal[]types。

既不return: Criminal[] []; 也不return []: Criminal[]; 为我工作。

乍一看,我通过在返回之前创build一个types化的variables(正如你正确的报告)来解决它,但是(我不知道JavaScript引擎是如何工作的)它可能会产生开销并且不太可读。

为了彻底,我会在我的回答中报告这个解决scheme:

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

最终我发现了TypeScripttypes的转换,这使我能够以更简洁和可读的(也许是有效的)方式来解决问题:

 return <Criminal[]>[]; 

希望这将有助于未来的读者!