문제 링크]()
주어진 길이의 tuple을 만들어라
Construct a tuple with a given length.
type ConstructTupleImplement<L extends number, Result extends unknown[]=[]>=
Result['length'] extends L?
Result
:ConstructTupleImplement<L,[...Result,unknown]>
type ConstructTuple<L extends number> = ConstructTupleImplement<L>
우선 사용처에서 구현용 제네릭을 사용하지 못하게 하기 위해 구현과 실제 타입을 분리했다.
간단한 재귀 형태이다.
type ConstructTuple<L extends number, O extends string = `${L}`, Count extends unknown[] = []> =
O extends `${infer F}${infer R}` ? (
ConstructTuple<L, R, N<Count>[keyof N & F]>
) : Count
type N<T extends unknown[] = []> = {
'0': [...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T],
'1': [...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, unknown],
'2': [...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, unknown, unknown],
'3': [...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, unknown, unknown, unknown],
'4': [...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, unknown, unknown, unknown, unknown],
'5': [...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, unknown, unknown, unknown, unknown, unknown],
'6': [...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, unknown, unknown, unknown, unknown, unknown, unknown],
'7': [...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, unknown, unknown, unknown, unknown, unknown, unknown, unknown],
'8': [...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown],
'9': [...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown],
}
문제에서 명시한 1000 제한을 뛰어넘은 풀이이다.
T의 n*10+[property]개를 하는 타입 N을 구현한 후, 이를 활용한 풀이이다.
https://github.com/type-challenges/type-challenges/issues/14153