索引签名(Index Signatures)是 TypeScript 中一种用于描述对象或类可以通过索引(类似于数组索引或对象属性名)访问的成员的方式。索引签名允许你定义对象或类的索引类型以及对应索引的值类型。
以下是一个使用索引签名的例子:
// 使用索引签名定义字符串索引类型和对应值的类型
interface StringDictionary {
[key: string]: string;
}
// 使用索引签名定义数字索引类型和对应值的类型
interface NumberDictionary {
[index: number]: number;
}
// 使用索引签名定义混合索引类型和对应值的类型
interface MixedDictionary {
[key: string]: string | number;
}
// 使用索引签名定义类的索引类型和对应值的类型
class MyArray {
[index: number]: string;
constructor() {
// 实现类的索引签名
}
}
在上述例子中:
StringDictionary
接口使用字符串索引签名,表示对象的属性名是字符串,对应的值是字符串类型。NumberDictionary
接口使用数字索引签名,表示对象的属性名是数字,对应的值是数字类型。MixedDictionary
接口使用混合索引签名,表示对象的属性名可以是字符串或数字,对应的值是字符串或数字类型。MyArray
类使用数字索引签名,表示该类实例可以通过数字索引来访问元素,对应的值是字符串类型。
限制
-
索引签名只能为字符串或数字: TypeScript 中的索引签名只支持字符串类型和数字类型。
-
数字索引的返回值类型必须是字符串索引返回值类型的子类型: 如果同时存在字符串索引和数字索引,那么数字索引的返回值类型必须是字符串索引返回值类型的子类型,因为在 JavaScript 中,数字索引会被转换为字符串。
interface Dictionary {
[index: number]: string;
length: number; // Error: 数字索引返回值类型必须是字符串索引返回值类型的子类型
}
索引签名为 TypeScript 提供了一种动态的、灵活的访问对象成员的方式,特别适用于那些具有动态属性的对象或类的描述。