导入
定义与用法
本课程简要介绍了 TypeScript 中的索引签名。
简介
JavaScript 允许使用方括号 [] 来访问对象的成员,只需将成员名称放在方括号之间。这种方式支持动态获取值,而无需使用点号语法。这种技术称为通过索引签名访问,适用于任何对象的值读取或赋值。
TypeScript 在此基础上提供了更强大的功能,增强了对索引操作的控制能力。首先,只能通过字符串或数字来访问索引。而在 JavaScript 中,可以使用对象作为键,此时会回退到其 toString 方法,这可能导致问题,因为 toString 通常返回 [object Object]。
对于数值类型的索引映射,成员可以是任意类型。以下示例中的 m4 是一个包含两个基本类型的对象,同时 m1 是字符串类型,m3 是布尔类型。
1interface MyStringDictionaryWithMembers3 { 2 [key: number]: string; 3 m1: string; 4 m2: number; 5 m3: boolean; 6 m4: { x: string; y: number }; 7}
配置
当启用 TypeScript 的 noImplicitAny 选项(设为 true)时,在强类型环境下,不允许访问未定义的成员。对于每个新项目,都应将此选项设置为 true,以强制执行更严格的类型检查。
1let objectIndex: { x: number; y: string } = { x: 1, y: "2" }; 2objectIndex["x"] = 2; 3objectIndex["y"] = "a string"; 4// objectIndex[0] = 1; // 编译失败 5// objectIndex[{ x: 1 }] = 123; // 编译失败 6console.log(objectIndex); // { x: 2, y: 'a string' }