在http://www.typescriptlang.org/Handbook#interfaces-array-types 这意味着什么 “有限制,从数字索引返回的类型必须是从字符串索引返回的类型的子类型。”
有人能举个例子吗?
答案 0 :(得分:1)
仅供参考,有两种类型的索引签名,字符串和数字。
字符串索引签名:
[index: string]: SomeType
这表示当我通过字符串索引访问此对象的属性时,该属性将具有类型SomeType
。
数字索引签名:
[index: number]: SomeOtherType
这表示当我通过数字索引访问此对象的属性时,该属性将具有类型SomeOtherType
。
要明确的是,通过字符串索引访问属性是这样的:
a["something"]
并通过数字索引:
a[123]
您可以定义字符串索引签名和数字索引签名,但数字索引的类型必须与字符串索引相同,或者它必须是字符串索引返回的类型的子类。 / p>
所以,这没关系:
interface SomeInterface {
[index: string]: Fruit;
[index: number]: Fruit;
}
因为两个索引签名都具有相同的类型Fruit
。但你也可以这样做:
interface SomeInterface {
[index: string]: Fruit;
[index: number]: Apple;
}
只要Apple
是Fruit
的子类。