Typescript 숫자 리터럴 유형 X의 N번째 루트를 찾는 방법
여기서 x와 n은 모두 숫자 리터럴 유형입니다.
이렇게 하려면 약간 수정하여 유형을 활용해야 합니다.
type CreateArrayWithLengthX<
LENGTH extends number,
ACC extends unknown[] = [],
> = ACC['length'] extends LENGTH
? ACC
: CreateArrayWithLengthX<LENGTH, [...ACC,1]>
type Multiplication<X extends number, Y extends number, Z extends number[] = [], V extends unknown[] = []> =
[...CreateArrayWithLengthX<Y>]['length'] extends Z['length']
? V
: Multiplication<X,Y,[1,...Z],[...CreateArrayWithLengthX<X>,...V]>
type Exponentiation<X extends number, N extends number, Counter extends number[] =[], Acc extends unknown[] = [1]> =
Counter['length'] extends N
? Acc // modified
: Exponentiation<X, N, [1, ...Counter], Multiplication<Acc['length'],X> >
좋아, 이제 빌딩 블록이 생겼으니 해보자
type Root <X extends number, N extends number, Counter extends number[] = []> =
[...Exponentiation<Counter['length'], N>]['length'] extends X
? Counter['length']
: Root<X, N, [1,...Counter]>
type A = Root<4,2> // 2
type B = Root<8,3> // 2
type C = Root<81,4> // 3
type D = Root<625,4> // 5
type E = Root<1024,10> // 2
type F = Root<2187,7> // 3
type G = Root<9261,3> // 21
playground
제한: X와 N은 양의 정수여야 하며 양의 정수 루트에서만 작동합니다. 최대 튜플 크기가 9,999이므로 X는 9,999를 초과할 수 없습니다.
result^(N-1)이 1000보다 작은 경우 X는 999를 초과할 수 있습니다.
경고, 입력을 하나씩 삽입하지 않으면 놀이터가 깨질 것입니다.
Reference
이 문제에 관하여(Typescript 숫자 리터럴 유형 X의 N번째 루트를 찾는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tylim88/typescript-numeric-literal-types-how-to-n-x-root-4lj8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)