Skip to content

TS 高级 - 索引映射条件类型

1. 索引类型

1.1 字符串索引

字符串索引允许通过字符串键来访问对象的属性。使用 keyof 关键字获取对象的键集合。

typescript
interface Person {
  name: string
  age: number
  job: string
}

type PersonKey = keyof Person // "name" | "age" | "job"

1.2 数字索引

数字索引允许通过数字键来访问对象的属性。

typescript
interface ArrayType {
  [index: number]: string
}

const myArray: ArrayType = ['a', 'b', 'c']
const element: string = myArray[0]

2. 映射类型

2.1 Partial<T>

Partial<T> 创建一个新类型,使所有属性都变成可选。

typescript
interface MyObject {
  name: string
  age: number
}

type PartialMyObject = Partial<MyObject>
// { name?: string; age?: number; }

2.2 Readonly<T>

Readonly<T> 创建一个新类型,使所有属性都变成只读。

typescript
interface MyObject {
  name: string
  age: number
}

type ReadonlyMyObject = Readonly<MyObject>
// { readonly name: string; readonly age: number; }

2.3 Record<K, T>

Record<K, T> 创建一个包含指定键和值类型的新类型。

typescript
type MyRecord = Record<string, number>
// { [key: string]: number; }

3. 条件类型

条件类型允许根据类型的关系在类型系统中进行条件分支,通常与泛型结合使用。

typescript
type Check<T> = T extends string ? boolean : number

const result1: Check<string> = true // 类型是 boolean
const result2: Check<number> = 42 // 类型是 number

条件类型使得类型的处理可以根据不同的条件进行选择,提供更高层次的灵活性和泛化能力。深入理解这些 TypeScript 高级类型特性,可以使代码更具表达力,同时在编译时提供更强大的类型检查。