条件类型(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'
实践建议
- 以可读性优先:复杂类型抽象配注释和测试。
- 类型收缩:
satisfies 与 as const 结合,收敛推断。 - 渐进引入:从 DTO、接口开始,逐步覆盖到业务核心。