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