当您使用接口(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/