Tuple to Enum Object
提出詳細
type Pure<T> = { [K in keyof T]: T[K] } type Enum< T extends readonly string[], N extends boolean = false, Acc={}, Count extends readonly unknown[]=[]> = T extends readonly [infer T1 extends string, ...infer T2 extends string[]] ? Enum<T2, N, Acc & { readonly [K in T1 as `${Capitalize<T1>}`]: N extends true ? Count["length"] : K }, [...Count, 0]> : Pure<Acc>
提出日時 | 2023-09-22 16:00:59 |
---|---|
問題 | Tuple to Enum Object |
ユーザー | sankantsu |
ステータス | Accepted |
import type { Equal, Expect } from '@type-challenges/utils' const OperatingSystem = ['macOS', 'Windows', 'Linux'] as const const Command = ['echo', 'grep', 'sed', 'awk', 'cut', 'uniq', 'head', 'tail', 'xargs', 'shift'] as const type cases = [ Expect<Equal<Enum<[]>, {}>>, Expect<Equal< Enum<typeof OperatingSystem>, { readonly MacOS: 'macOS' readonly Windows: 'Windows' readonly Linux: 'Linux' } >>, Expect<Equal< Enum<typeof OperatingSystem, true>, { readonly MacOS: 0 readonly Windows: 1 readonly Linux: 2 } >>, Expect<Equal< Enum<typeof Command>, { readonly Echo: 'echo' readonly Grep: 'grep' readonly Sed: 'sed' readonly Awk: 'awk' readonly Cut: 'cut' readonly Uniq: 'uniq' readonly Head: 'head' readonly Tail: 'tail' readonly Xargs: 'xargs' readonly Shift: 'shift' } >>, Expect<Equal< Enum<typeof Command, true>, { readonly Echo: 0 readonly Grep: 1 readonly Sed: 2 readonly Awk: 3 readonly Cut: 4 readonly Uniq: 5 readonly Head: 6 readonly Tail: 7 readonly Xargs: 8 readonly Shift: 9 } >>, ]