题目描述
最近在学习typescript,看的是这里的内容:https://ts.xcatliu.com/
照着上面的代码自己都实践了一遍,看到接口那个章节的任意属性部门有了疑惑,具体内容:https://ts.xcatliu.com/basics/type-of-object-interfaces#ren-yi-shu-xing
使用 [propName: string] 定义了任意属性取 string 类型的值。
给的示例代码是:
interface Person {
name: string;
age?: number;
[propName: string]: any;
}
let tom: Person = {
name: 'Tom',
gender: 'male'
};
本地我改成:
interface Human {
name: string;
[properName:string]: any;
}
let man: Human = {
name: "JayChou"
};
然后突发奇想把 [properName: string]
改成了 [properName:number]
结果发现编译没报错,通过了,然后改成 [properName:any]
发现报错信息:
索引签名参数类型必须为 "string" 或 "number"。ts(1023)
所以,接口属性只有[properName: string]
和[properName: number]
这个时候感觉好像我看懂了,但是如下情况:
interface Human {
name: string;
[properName: string]: any;
}
let man: Human = {
name: "JayChou",
1: 1
};
编译没报错,和预想的不一样,原本以为"1:1"会报错。为什么不报错。
索引签名参数类型必须为 "string" 或 "number"。 嗯..... 很好的说明了