Open rimo030 opened 6 months ago
바로 이전에 작성한 #110 을 이용해 다음과 같이 풀었었다.
type StringToArray<S extends string> = S extends `${infer F}${infer R}`
? [F, ...StringToArray<R>]
: []
type Combination<T extends string[], U = T[number], K = U> = K extends string
? `${K}` | `${K}${Combination<[], Exclude<U, K>>}`
: never
type AllCombinations<S extends string> = '' | Combination<StringToArray<S>>
불필요하게 배열로 바꾸는 작업을 빼고 바로 문자열을 유니온으로 바꾸어 작성하면 더 간단하다.
type StringToUnion<S extends string> = S extends `${infer F}${infer R}`
? F | StringToUnion<R>
: ''
type AllCombinations<S extends string, U = StringToUnion<S>, K = U> = U extends string
? `${U}` | `${U}${AllCombinations<'' ,Exclude<K, U>>}`
: never