下面的语法,指出当StringArray
与number
索引,它会返回一个string
。例如 - let myArray: StringArray;myArray = ["Bob", "Fred"];let myStr: string = myArray[0];
可转位型 -</p> <pre><code>interface StringArray { [index: number]: string; } </code></pre> <p>打字稿
所以,myArray
的类型为限制于存储为string
类型值,通过与StringArray
类型声明它。键(索引)总是string
型,引擎盖(JavaScript的)下,尽管提它作为number
从下面的语法,
class Animal{
name: string;
}
class Dog extends Animal{
breed: string;
}
interface NotOkay {
[x: number]: Animal;
[x: string]: Dog;
}
1)什么NotOkay
语法状态?
从下面的语法,
interface NumberDictionary {
[index: string]: number;
length: number; // ok, length is a number
name: string; // error, the type of 'name' is not a subtype of the indexer
}
2)什么NumberDictionary
状态?
3)为什么这两种语法都错了? error TS2413
& error: TS2411
?https:// www。typescriptlang.org/docs/handbook/interfaces.html – 2017-11-25 15:22:25
@betadeveloper我有一个想法,JavaScript在索引它之前将索引对象转换为字符串。但是,当文档说明时,我没有得到,*从数字索引器返回的类型必须是从字符串索引器*返回的类型的子类型。首先,我不明白语法 – overexchange
编译器可以根据索引的类型和值的类型推断有效的操作。在_NotOkay_对象_o_的情况下,其数字1作为键和动物作为它的值,当用字符串“1”查找_o_时,它将访问动物而不是狗。问题是动物中缺少属性_breed_ so _o [“1”]。breed_将是一个无效操作。如果_number_索引是_Dog_的子类型,那么该操作就可以,因为子类型继承_Dog_中的_breed_。 – 2017-11-25 20:52:43