Answers:
现有答案错过了一个选项,因此这里是完整列表:
// 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>();
显式指定类型是在变量声明的类型推断失败时的通用解决方案。
使用类型断言(有时称为类型转换,但在TypeScript中不是真正的类型转换)的优点适用于任何表达式,因此即使没有声明变量也可以使用它。类型声明有两种语法,但是如果您关心的话,只有后者可以与JSX结合使用。
使用Array构造函数只会帮助您解决此特定用例,但我个人认为这是最易读的。但是,在运行时对性能有轻微影响 *。另外,如果有人疯狂地重新定义Array构造函数,则含义可能会改变。
这是个人喜好问题,但是我发现第三个选项最容易理解。在绝大多数情况下,上述缺点可以忽略不计,而可读性是最重要的因素。
*: 有趣的事实; 在撰写本文时,Chrome中的性能差异为60%,而Firefox中没有可测量的性能差异。
我知道这是一个老问题,但是最近我遇到了类似的问题,这种问题无法用这种方法解决,因为我必须返回特定类型的空数组。
我有
return [];
这里[]
是Criminal[]
类型。
既return: Criminal[] [];
没有return []: Criminal[];
为我工作,也没有为我工作。
乍一看,我通过在返回值之前创建一个类型化变量(如您所正确报告的)来解决它,但是(我不知道JavaScript引擎如何工作)它可能会产生开销,并且可读性较差。
为了彻底,我也将在答案中报告此解决方案:
let temp: Criminal[] = [];
return temp;
最终,我发现了TypeScript类型转换,这使我能够以更简洁,可读性更好(也许更有效)的方式解决问题:
return <Criminal[]>[];
希望这对以后的读者有所帮助!