gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:30:23 24 4
gpt4 key购买 nike

当您使用接口(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 神奇地弄清楚了 length 字段应该如何工作,并且我得到了预期的输出。这是怎么发生的?

最佳答案

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

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

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com