在 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。