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

tyg4sfes  于 2022-12-24  发布在  TypeScript
关注(0)|答案(7)|浏览(249)

我正在创建一个简单的逻辑游戏称为“三个犯罪”在TypeScript。
当尝试在TypeScript中预分配类型化数组时,我尝试做了如下操作:

var arr = Criminal[];

这会导致错误“检查表达式项的格式”。
我也试过这样做

var arr : Criminal = [];

这产生了“不能将任何[]转换为'犯罪'
用“TypeScript”的方法做这件事是什么?

kyvafyod

kyvafyod1#

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

// 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.显式指定类型是变量声明的类型推断失败时的通用解决方案。
1.使用type assertion(有时称为强制转换,但在TypeScript中不是真正的强制转换)的优点是适用于任何表达式,因此即使没有声明变量也可以使用它。类型Assert有两种语法,但如果您关心的话,只有后者可以与JSX结合使用。
1.使用Array构造函数只会在这个特定的用例中对您有所帮助,但我个人认为这是最具可读性的。然而,在运行时有一点performance impact *。此外,如果有人疯狂到重新定义Array构造函数the meaning could change
这是个人喜好的问题,但我发现第三种选择是最可读的。在绝大多数情况下,提到的缺点是可以忽略的,可读性是最重要的因素。

  • :有趣的事实;在写这篇文章的时候,Chrome的性能差异是60%,而Firefox没有可测量的性能差异。
k75qkfdt

k75qkfdt2#

在TypeScript中正确预分配类型化数组的问题由于数组文本语法而有些模糊,因此它不像我最初想象的那样直观。
正确的方法应该是

var arr : Criminal[] = [];

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

a1o7rhls

a1o7rhls3#

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

return [];

其中[]Criminal[]类型。
return: Criminal[] [];return []: Criminal[];都不适合我。
乍一看,我通过在返回变量之前创建一个类型化变量(正如您正确报告的那样)来解决这个问题,但是(我不知道JavaScript引擎是如何工作的)这可能会产生开销,而且可读性较差。
为了彻底起见,我也将在回答中报告此解决方案:

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

最后我找到了TypeScript类型转换,它使我能够以一种更简洁、可读性更强(也许更有效)的方式解决问题:

return <Criminal[]>[];

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

6ojccjat

6ojccjat4#

请试试这个,它对我很有效.

return [] as Criminal[];
s8vozzvw

s8vozzvw5#

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

var arr: Criminal[] = [];

我假设您使用var,所以这意味着在func()中的某个地方声明它,我的建议是使用let而不是var
如果声明它为c类属性,使用访问修饰符,如private,public,protected。

xtfmy6hx

xtfmy6hx6#

对于公开访问使用如下:

public arr: Criminal[] = [];
oyt4ldly

oyt4ldly7#

TLDR:

// explicitly type the variable arr
var arr: Criminal[] = [];

深度:

如果我们有一个数组没有像这样的元素:

var arr = [];

TS无法在编译时知道该数组中的内容,arr的类型将为:

any[]

然后程序员的工作是告诉TS数组的类型,这可以通过类型注解来完成:

var arr: Criminal[] = [];

如果我们从数组中得到一个元素,Typescript知道这个元素的类型是Criminal

相关问题