接口任意属性章节有误
Vicew opened this issue · 1 comments
Vicew commented
interface Person {
name: string;
age?: number;
[propName: string]: string;
}
let tom: Person = {
name: 'Tom',
age: 25,
gender: 'male'
};
// index.ts(3,5): error TS2411: Property 'age' of type 'number | undefined' is not assignable to string index type 'string'.
// index.ts(7,5): error TS2322: Type '{ name: string; age: number; gender: string; }' is not assignable to type 'Person'.
// Property 'age' is incompatible with index signature.
// Type 'number' is not assignable to type 'string'.新的报错中我们可以看出接口的可选属性age的类型为number或者undefined,所以在后面作者用联合类型解决的时候需要多加一个undefined才正确
CodeWielder commented
同样是这个章节中。
一个接口中只能定义一个任意属性。
我感觉这里写的可能有点问题,不知道是否可以改为:任意属性的索引签名参数类型为 string 或者是 number。
它们两个是可以同时存在的,比如:
interface C {
[prop: string]: any;
[propName: number]: any;
}但是 number 必须是 string 的子集。
具体内容参考。