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>();
-
明确指定types是每当types推断对variables声明失败时的一般解决scheme。
-
使用types断言 (有时称为cast,但它不是TypeScript中的强制types)的优点是适用于任何expression式,所以即使没有声明variables,也可以使用它。 对于types断言有两种语法,但只有后者才能与JSX结合使用,如果你关心的话。
-
使用数组构造函数只会帮助你在这个特定的用例,但我个人认为最可读的。 但是,在运行时会有轻微的性能影响 *。 另外,如果有人疯了,重新定义数组构造函数, 其含义可能会改变 。
这是一个个人喜好的问题,但我发现第三个选项是最可读的。 在绝大多数情况下,提到的缺点是微不足道的,可读性是最重要的因素。
*: 有趣的事实; 在编写本文时,Chrome的性能差异是60%,而在Firefox中则没有可衡量的性能差异。
我知道这是一个古老的问题,但我最近遇到了类似的问题,不能用这种方法解决,因为我不得不返回一个特定types的空数组。
我有
return [];
其中[]
是Criminal[]
types。
既不return: Criminal[] [];
也不return []: Criminal[];
为我工作。
乍一看,我通过在返回之前创build一个types化的variables(正如你正确的报告)来解决它,但是(我不知道JavaScript引擎是如何工作的)它可能会产生开销并且不太可读。
为了彻底,我会在我的回答中报告这个解决scheme:
let temp: Criminal[] = []; return temp;
最终我发现了TypeScripttypes的转换,这使我能够以更简洁和可读的(也许是有效的)方式来解决问题:
return <Criminal[]>[];
希望这将有助于未来的读者!