当前位置: 首页 > 知识库问答 >
问题:

TypeScript:创建一个空类型容器数组

雍骏俊
2023-03-14

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

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

var arr = Criminal[];

它给出了错误“表达式项的检查格式”。

也尝试过这样做

var arr : Criminal = [];

而这产生了“无法将任何[]转换为‘罪犯’”

什么是'TypeScript'的方式来做到这一点?

共有3个答案

井学
2023-03-14

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

我有过

return [];

其中<法典>[]为<法典>刑事[]类型。

无返回:刑事[][] nor<代码>返回[]:刑事[] 为我工作。

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

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

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

最终我找到了TypeScript类型转换,这使我能够以更简洁、更易读(也可能更有效)的方式解决问题:

return <Criminal[]>[];

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

冀嘉木
2023-03-14

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

正确的方法是

var arr : Criminal[] = [];

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

希望这对其他人有帮助!

颜云瀚
2023-03-14

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

// 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结合使用。

    使用数组构造函数只会在这个特定的用例中对您有所帮助,但我个人认为这是最具可读性的。但是,在运行时会对性能产生轻微影响*。此外,如果有人疯狂地重新定义数组构造函数,其含义可能会改变。

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

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

  •  类似资料:
    • 在像C#这样的语言中,我可以声明一个列表列表,例如: 有没有类似的方法来在 TypeScript 中声明一个强类型数组数组?我尝试了以下方法,但都没有编译。

    • 嗨,我是TypeScript新手,我来自C#和JavaScript背景。我正在尝试创建一种方法,使我能够创建类似于C#的类模型。 以下是我尝试过的: 我希望这会生成一个JavaScript模型,公开声明的属性,但这只生成一个函数,没有声明属性。 在查看文档之后,我注意到为了公开属性,我必须添加一个构造函数并从中初始化属性。虽然这可能会起作用,但在每个模型可能有20个或更多属性的情况下,这并没有帮助

    • 问题内容: 我有一个我必须验证问题值的对象,这些对象的某些属性是自定义对象的数组。这样一来,这将涉及到数组的各个元素。为每个元素执行吸气剂,例如: 这是我需要达到的。我已使用带有属性列表的枚举以以下方式提取了数据。 致电: 我将使用数组中不同类型和不同值的多个数组。我想创建一个如下的方法。 这给了我多个错误,这些错误主要与repeatingGrp []有关。数组类型应与枚举名称相同。是否可以创建这

    • 本文向大家介绍创建一个MySQL Docker容器,包括了创建一个MySQL Docker容器的使用技巧和注意事项,需要的朋友参考一下 Docker容器化的最重要功能之一是,它创建了一个有限的环境,用于在安装所有必需的依赖项和软件包的情况下运行应用程序。大多数应用程序需要后端数据库来存储数据点。Oracle提供了可在容器中运行MySQL的Docker映像,因此它成为测试数据库应用程序的理想选择。测

    • 前面小节中,介绍了 TypeScript 类型检查机制中的 类型推断 与 类型保护,本节来介绍 类型兼容性。 我们学习类型兼容性,就是在学习 TypeScript 在一个类型能否赋值给其他类型的规则。本节将会详细介绍 TypeScript 在函数、枚举、类和泛型中的类型兼容性规则。 1. 慕课解释 类型兼容性用于确定一个类型是否能赋值给其他类型。 TypeScript 的类型检查机制都是为了让开发

    • 我撰写并发表了以下内容:https://github.com/justin-calleja/pkg-dependents 现在我写这个包在TypeScript:https://github.com/justin-calleja/update-dependents 我想在update dependents中重复使用pkg dependents(IndexInfoDict)中定义的类型,我想检查是否有