您可以定义字符串和数字索引签名.
从规格:
对象类型最多可包含一个字符串索引签名和一个数字索引签名.
所以你可以这样做:
interface IMap{ [index: string]: T; [index: number]: T; }
这就是你追求的吗?
此外,当您仅定义字符串索引签名时:
具体来说,在类型为T的字符串索引签名的类型中,所有属性和数字索引签名必须具有可分配给T的类型.
所以:
class Foo { [index: string]: number; } let f = new Foo(); f[1] = 1; //OK f[6] = "hi"; //ERROR: Type 'string' is not assignable to type 'number'