arrays - TypeScript 如何了解自定义数组类型中长度字段的行为?

标签 arrays typescript types interface

当您使用接口(interface)创建自定义数组类型,并为其指定字段 length: number 时,TypeScript 似乎会以某种方式自行计算数组的长度,但如果您忽略该字段的自定义类型定义,它不再起作用。

这里的后台究竟发生了什么?

我的代码是:

interface IPerson {
    fullName: string;
    age: number;
}

class Person implements IPerson {
    fullName: string;
    age: number;

    constructor(fullName: string, age: number) {
        this.fullName = fullName;
        this.age = age;
    }
}

interface IPersonArray {
    [index: number]: IPerson;
    length: number;
}

var personArray: IPersonArray = [new Person("Jane", 21),
                                new Person("John", 22)];

for (var i = 0; i < personArray.length; i++) {
    console.log(personArray[i].fullName);
}

这是最相关的部分:

interface IPersonArray {
    [index: number]: IPerson;
    length: number;
}

var personArray: IPersonArray = [new Person("Jane", 21),
                                new Person("John", 22)];

for (var i = 0; i < personArray.length; i++) {
    console.log(personArray[i].fullName);
}

我只是在界面中声明了 length 字段,但 TypeScript 神奇地弄清楚了长度字段应该如何工作,并且我得到了预期的输出。这是怎么发生的?

最佳答案

这并不像看起来那么神奇。

您自己在接口(interface)IPersonArray 中添加该字段的定义,然后将一个数组分配给personArray。 TypeScript 知道数组有 length 属性,因此赋值是可以的。并且在运行时,调用数组的长度属性。

如果您将 length 从接口(interface)/类型中排除,您将无法访问它,就像您无法访问您碰巧分配的数组的任何其他属性一样personArray

关于arrays - TypeScript 如何了解自定义数组类型中长度字段的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40306521/

相关文章:

C 多维 char 数组 - 赋值从指针生成整数,无需强制转换

javascript - 检查任意值是否对称

php - 如何在 PHP 中输​​出 HackerRank 的简单数组求和挑战?

javascript - 导出由导入的类/接口(interface)组成的模块?

javascript - 按钮的事件监听器不会更改 Angular 中的类字段

haskell - 为什么 Djinn 无法实现常见的一元函数?

javascript - 在输出之前随机化 JSON 内容的内容

html - ngOptions 不起作用,即使是基本示例

haskell - 在 Haskell 中处理来自第三方库的数据类型的最佳实践?

haskell - 类型同义词究竟是如何工作的?