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.构建更灵活和可重用的类型定义

posted @ 2025-09-08 16:34  Seamless  阅读(14)  评论(0)    收藏  举报