TypeScript 进阶:类型体操与实战技巧

用条件类型与分布式条件类型可以写出强大的工具类型,提升工程可维护性。

关键模式

// 分布式条件类型示例
type NonNullableKeys<T> = {
  [K in keyof T as undefined extends T[K] ? never : K]: T[K]
}

type Result = NonNullableKeys<{ a: string | undefined; b: number; c?: boolean }>;
// Result => { b: number }

// 函数参数提取
type ArgumentType<F> = F extends (arg: infer A) => any ? A : never;
const fn = (x: { id: string }) => x.id;
type A = ArgumentType<typeof fn>;
// A => { id: string }

satisfies 的好处

在对象字面量上使用 satisfies 可保留更精确的类型信息并进行约束校验。