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

Javascript TypeScript:创建空的类型化容器数组,javascript,arrays,typescript,Javascript,Arrays,Typescript,我正在用TypeScript创建一个简单的逻辑游戏,名为“三个犯罪” 在尝试在TypeScript中预先分配类型化数组时,我尝试执行以下操作: var arr = Criminal[]; 这就产生了错误 “检查表达式术语的格式” 我也试过这样做 var arr : Criminal = []; 这就产生了“不能将任何[]转换为‘罪犯’” “TypeScript”是如何做到这一点的?在TypeScript中正确预分配类型化数组的问题有些模糊,因为数组文字语法,所以它不像我最初想象的那样直观 正

我正在用TypeScript创建一个简单的逻辑游戏,名为“三个犯罪”

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

var arr = Criminal[];
这就产生了错误 “检查表达式术语的格式”

我也试过这样做

var arr : Criminal = [];
这就产生了“不能将任何[]转换为‘罪犯’”


“TypeScript”是如何做到这一点的?

在TypeScript中正确预分配类型化数组的问题有些模糊,因为数组文字语法,所以它不像我最初想象的那样直观

正确的方法是

var arr : Criminal[] = [];
这将为您提供一个正确键入的空数组,该数组存储在变量“arr”中


希望这对其他人有帮助!

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

我有

其中
[]
犯罪[]
类型

无论是
return:Criminal[];
还是
return[]:Criminal[];
都不适合我

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

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

let temp: Criminal[] = [];
return temp;
最终,我找到了TypeScript类型转换,这使我能够以一种更简洁易读(也许更高效)的方式解决问题:

return[];

希望这将对未来的读者有所帮助!

现有的答案遗漏了一个选项,下面是一个完整的列表:

// 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.显式声明类型
var arr:罪犯[]=[];
//2.通过类型断言
var-arr=[];
var arr=[]作为罪犯[];
//3.使用数组构造函数
var arr=新数组();
  • 当变量声明的类型推断失败时,显式指定类型是通用的解决方案

  • 使用类型转换(有时称为类型转换,但实际上它不是类型脚本中的类型转换)的优点适用于任何表达式,因此即使没有声明变量,也可以使用它。类型断言有两种语法,但如果您关心这一点,只有后者可以与JSX结合使用

  • 使用数组构造函数只会在这个特定的用例中对您有所帮助,但我个人认为这是最具可读性的。然而,在运行时有一点需要注意*。此外,如果有人疯狂地重新定义数组构造函数

  • 这是个人偏好的问题,但我认为第三种选择最具可读性。在绝大多数情况下,上述缺点可以忽略不计,可读性是最重要的因素


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

    对于公开访问使用,如下所示:

    public arr: Criminal[] = [];
    

    好吧,这里的语法错了,正确的方法是:

    var arr: Criminal[] = [];
    
    我假设您正在使用var,这意味着在
    func()
    中的某个地方声明它,我的建议是使用
    let
    而不是
    var


    如果将其声明为c类属性,则usse将访问诸如private、public和protected之类的修饰符。

    请尝试此方法,它对我有效

    return [] as Criminal[];
    
    var arr: Criminal[] = [];
    
    return [] as Criminal[];