条件类型(Conditional Types)

type IsString = T extends string ? true : false;
// IsString<'a'> = true, IsString<42> = false

分配条件(Distributive)与工具

type Nullable<T> = T | null | undefined;
type NonNullableKeys<T> = { [K in keyof T as undefined extends T[K] ? never : K]: T[K] };

映射类型(Mapped Types)

type ReadonlyDeep<T> = {
  readonly [K in keyof T]: T[K] extends object ? ReadonlyDeep<T[K]> : T[K]
}

模板字面量类型

type EventName<T extends string> = `on${Capitalize}`;
// EventName<'click'> = 'onClick'

实践建议

  • 以可读性优先:复杂类型抽象配注释和测试。
  • 类型收缩: satisfiesas const 结合,收敛推断。
  • 渐进引入:从 DTO、接口开始,逐步覆盖到业务核心。