interface T {
[index:number]:string
}
let arr:T = ["1","2",3] // 第三项:不能将类型“number”分配给类型“string”
let obj:T = {
0:'0', // ok
a:'1' // 对象字面量只能指定已知属性,并且“a”不在类型“T”中
}
interface T {
[key:string]:number
}
let obj:T = {
"name":100,
"age":"200" // 不能将类型“string”分配给类型“number”
}
const symbol = Symbol("key");
interface A {
[y: string]: string;
}
let a: A = {
x: "1", // ok
symbol: "1", // ok
1: "1", // ok
};
interface B {
[x: number]: string;
}
let b: B = {
x:'1', // 对象字面量只能指定已知属性,并且“x”不在类型“B”中
symbol :'1', // 对象字面量只能指定已知属性,并且“symbol ”不在类型“B”中
1: "1", // ok
};
interface T {
name: string; // Ok
age?: number; // 类型“number | undefined”的属性“age”不能赋给“string”索引类型“string”
sex?: undefined; // OK
[propName: string]: string | undefined;
}
- 可以同时使用两种类型的索引,但数字索引的返回值必须是字符串索引返回值类型的子类型。 因为当使用 number 来索引时,JavaScript 会将它转换成 string 然后再去索引对象:
interface Animal {
name: string;
}
interface Dog extends Animal {
breed: string;
}
interface NotOkay {
[x: string]: Dog;
[x: number]: Animal; // Error
}
interface Okay {
[x: string]: Animal;
[x: number]: Dog; // OK
}
网友评论