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 // modified
: 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['length']
: Exponentiation<X, N, [1, ...Counter], Multiplication<Acc['length'],X> >
type A = Exponentiation<2,0> // 1
type B = Exponentiation<2,1> // 2
type C = Exponentiation<2,10> // 1024
type D = Exponentiation<3,7> // 2187
type E = Exponentiation<21,3> // 9261
playground
제한: 최대 튜플 크기가 9999이므로 결과는 9999를 초과할 수 없습니다.
x의 값에 따라 n에 대한 제한도 있습니다.
x가 2이면 n은 10을 초과할 수 없습니다(2¹⁰는 2가 1000을 초과하는 최초의 지수입니다).
x가 3이면 n은 7을 초과할 수 없습니다(3⁷은 3의 지수가 처음으로 1000을 초과함)
이 시점에서 x^n은 1000보다 크고 최대 재귀 깊이가 1000이기 때문에 다음 n에 대해 길이가 1000보다 큰 배열을 만들 수 없습니다.
Reference
이 문제에 관하여(Typescript 숫자 리터럴 유형 X^N 방법(지수화)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tylim88/typescript-numeric-literals-exponentiation-d4o텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)