TypeScript索引访问类型详解
在 TypeScript 中,Indexed Access Types(索引访问类型)是一种通过索引来获取其他类型中特定属性的类型的方式。它类似于在 JavaScript 中通过索引访问对象属性的操作,但用于类型层面。
基本语法
Type[Key]
Type:可以是任意类型(对象类型、接口、元组等)
Key:必须是 Type 的有效索引键(可以是字符串、数字或符号字面量类型)
基本用法
1.访问对象类型的属性
interface Person { name: string; age: number; address: { street: string; city: string; }; } // 获取 name 属性的类型 type NameType = Person["name"]; // string // 获取 age 属性的类型 type AgeType = Person["age"]; // number // 获取嵌套属性的类型 type CityType = Person["address"]["city"]; // string
2.使用联合类型索引
type PersonProperty = Person["name" | "age"]; // string | number // 获取所有属性的类型联合 type AllProperties = Person[keyof Person]; // string | number | { street: string; city: string }
3.访问数组和元组类型
type StringArray = string[]; type ArrayElement = StringArray[number]; // string type Tuple = [string, number, boolean]; type FirstElement = Tuple[0]; // string type SecondElement = Tuple[1]; // number type AllElements = Tuple[number]; // string | number | boolean
注意事项
1.类型安全性:TypeScript 会确保索引键是有效的
type Invalid = Person["invalid"]; // 错误:类型"Person"上不存在属性"invalid"
2.动态索引:可以使用 keyof 获取所有可能的键
type PersonKeys = keyof Person; // "name" | "age" | "address"
3.嵌套访问:可以链式访问嵌套属性
type StreetType = Person["address"]["street"]; // string
总结
Indexed Access Types 是 TypeScript 类型系统中非常强大的特性,它允许你:
1.从复杂类型中提取特定属性的类型
2.创建基于现有类型的新类型
3.实现类型安全的属性访问操作
4.构建更灵活和可重用的类型定义

浙公网安备 33010602011771号