ts

ts类型高级使用

# 1. 只能传入指定类型参数的函数

type BandType<T,U>=Textends U ?never :T

function method<T>(x:BandType<T, number>){}

method('asdfasfd');

method({});

method(123)  //报错

# 2. 工具类型(Utility Types)

  • Partial<T>: 所有属性变为可选
  • Required<T>: 所有属性变为必需
  • Readonly<T>: 所有属性变为只读
  • Record<K, V>: 键类型为 K,值类型为 V 的对象
  • Pick<T, K>: 从 T 中选择属性 K
  • Omit<T, K>: 从 T 中排除属性 K
  • Exclude<T, U>: 从 T 中排除可赋值给 U 的类型
  • Extract<T, U>: 从 T 中提取可赋值给 U 的类型
  • NonNullable<T>: 排除 null 和 undefined
  • Parameters<T>: 函数参数类型
  • ReturnType<T>: 函数返回类型
  1. 内置工具类型(Utility Types)

TypeScript 提供了一些常用的内置工具类型,用于对已有类型进行变换和组合,提升类型系统的灵活性和表达能力。常见的工具类型如下:

# 2.1. Partial

将类型 T 的所有属性变为可选。

interface User {
  name: string
  age: number
}

type PartialUser = Partial<User>
// 等价于:{ name?: string; age?: number }

# 2.2. Required

将类型 T 的所有属性变为必选。

type RequiredUser = Required<PartialUser>
// 等价于:{ name: string; age: number }

# 2.3. Readonly

将类型 T 的所有属性变为只读。

type ReadonlyUser = Readonly<User>
// 等价于:{ readonly name: string; readonly age: number }

# 2.4. Pick<T, K>

从类型 T 中挑选部分属性组成新类型。

type NameOnly = Pick<User, 'name'>
// 等价于:{ name: string }

# 2.5. Omit<T, K>

从类型 T 中排除某些属性组成新类型。

type WithoutAge = Omit<User, 'age'>
// 等价于:{ name: string }

# 2.6. Record<K, T>

构造一个以 K 为键、T 为值的对象类型。

type UserMap = Record<string, User>
// 等价于:{ [key: string]: User }

# 2.7. Exclude<T, U>

从 T 类型中排除 U 类型的成员。

type T = 'a' | 'b' | 'c'
type T1 = Exclude<T, 'a' | 'b'>
// 结果:'c'

# 2.8. Extract<T, U>

从 T 类型中提取 U 类型的成员。

type T2 = Extract<T, 'a' | 'b'>
// 结果:'a' | 'b'

# 2.9. NonNullable

去除类型 T 中的 null 和 undefined。

type T3 = string | number | null | undefined
type T4 = NonNullable<T3>
// 结果:string | number

# 2.10. ReturnType

获取函数类型 T 的返回值类型。

function fn(): number {
  return 123
}
type FnReturn = ReturnType<typeof fn>
// 结果:number

# 2.11. Parameters

获取函数类型 T 的参数类型组成的元组。

function greet(name: string, age: number): void {}
type GreetParams = Parameters<typeof greet>
// 结果:[string, number]

# 2.12. ConstructorParameters

获取构造函数类型 T 的参数类型组成的元组。

class Person {
  constructor(name: string, age: number) {}
}
type PersonParams = ConstructorParameters<typeof Person>
// 结果:[string, number]

# 2.13. InstanceType

获取构造函数类型 T 的实例类型。

type PersonInstance = InstanceType<typeof Person>
// 结果:Person
上次更新: