String to Union
挑战
实现 StringToUnion
类型。它接收 string
类型参数,输出其所有字符的联合
(union)。
For example: 比如:
type Test = "123";
type Result = StringToUnion<Test>; // expected to be "1" | "2" | "3"
解答
在这个挑战中,我们需要遍历每个字符并把它加到联合(union)中。遍历字符串很容易, 我们需要做的是推断出字符串的两个部分,首字符和其余部分:
type StringToUnion<T extends string> = T extends `${infer C}${infer T}`
? never
: never;
在这里,我们将获得 2 个类型参数 C
和 T
(字符和尾部)。为了继续遍历字符串,我
们递归地调用它并将尾部作为参数传入:
type StringToUnion<T extends string> = T extends `${infer C}${infer T}`
? StringToUnion<T>
: never;
剩下的就是联合(union)本身了。我们需要添加第一个字符到联合(union)。在基本情况
下,StringToUnion
会返回C | never
,我们只需要将C
添加到联合(union)中:
type StringToUnion<T extends string> = T extends `${infer C}${infer T}`
? C | StringToUnion<T>
: never;
评论