타입으로 더하기 구현
뭔 개소린가 싶겠지만 가능하다.
먼저 이것부터 보자.
> [...[,,,], ...[,,]]['length']
5
일단 [,,, . . .] ([0, 0, 0 . . .])
이걸 구현해보자.
type Arr<N extends number, V extends Array<number> = []> = // TODO
number
N
을 받고
Array<number>
배열도 받자. (기본 []
)
type Arr<N extends number, V extends Array<number> = []> =
V["length"] extends N
? V
: Arr<N, [...V, 0]>
N
이 0 (V ( [] )의 길이
)이라면 그냥 []
를 리턴하자.
아니라면 반복하자.
이제 Add
를 구현해보자.
아까 말한 [...[,,,], ...[,,]]['length']
를 참고하면 쉽게 구현 가능하다.
type Add<A extends number, B extends number> = // TODO
A
+ B
를 하기 위해 위 코드처럼 인자를 받도록 하자.
[...Arr<A>, ...Arr<B>] extends { length: infer L }
? L extends number
? L
: never
: never;
[...Arr<A>, ...Arr<B>] extends { length: infer L }
는 [...Arr<A>, ...Arr<B>]['length'] extends infer L
으로도 가능하다.
그렇게 완성된 코드,
type Arr<N extends number, V extends Array<number> = []> =
V["length"] extends N
? V
: Arr<N, [...V, 0]>;
type Add<A extends number, B extends number> =
[...Arr<A>, ...Arr<B>] extends { length: infer L }
? L extends number
? L
: never
: never;
사실 개소리 맞다.
Author And Source
이 문제에 관하여(타입으로 더하기 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rok/4저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)