在 TypeScript 中,"分发"
(distributive)是指在条件类型中的联合类型上自动进行类型推断的机制。当使用条件类型操作联合类型时,TypeScript 会自动将联合类型中的每个成员都应用该条件类型。
下面是一个示例:
type Box<T> = {
value: T;
};
type Boxify<T> = T extends any ? Box<T> : never;
type StringBox = Boxify<string>;
// 等价于
// type StringBox = Box;
type NumberBox = Boxify<number>;
// 等价于
// type NumberBox = Box;
type AnyBox = Boxify<any>;
// 等价于
// type AnyBox = Box;
type UnionBox = Boxify<string | number>;
// 等价于
// type UnionBox = Box | Box;
在上面的例子中,我们定义了一个泛型类型 Box
表示一个盒子,它包含一个值 value
。然后,我们定义了一个条件类型 Boxify
,它通过判断泛型 T 是否为任意类型来决定是否对其进行包装为 Box
,否则为 never
。
在使用 Boxify
进行类型转换时,TypeScript 会自动将联合类型中的每个成员应用该条件类型。例如,StringBox
将会推断为 Box
,NumberBox
将会推断为 Box
,AnyBox
将会推断为 Box
,UnionBox
将会推断为 Box
。