Implement
MapStringUnionToObjectUnion<U>
to map a string union to an object union as below.
题目出处:https://bigfrontend.dev/zh/typescript/implement-MapUnion-U-M
type A = MapStringUnionToObjectUnion<'1'>
// {
// value: '1'
// }
type B = MapStringUnionToObjectUnion<'1' | '2'>
// {
// value: '1'
// } |
// {
// value: '2
// }
1.实现思路分析
MapStringUnionToObjectUnion的泛型参数,是一个字符串联合类型。
我们需要做的,实际上是将联合类型每个类型提取出来,构造成一个对象
提取可以使用 infer 关键字
提取出来做条件判断,判断提取出来的类型是否为string,如果是,构造新的对象
2.实现
type MapStringUnionToObjectUnion<T extends string> = T extends infer U
? U extends string
? { value: U }
: never
: never;
type Result = MapStringUnionToObjectUnion<"a" | "b">;
// type Result = {value: "a";} | {value: "b";}
3.知识点总结
infer关键字,infer用于定义新的类型变量,并推断它的值,一般用于提取子集元素的类型