Typescript 숫자 리터럴 유형 X * Y 방법(곱셈)
이제 우리는 곱셈을 할 수 있습니까?
예, 할 수 있습니다. 방법 1은 다음과 같습니다.
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[] = []> =
[...CreateArrayWithLengthX<Y>]['length'] extends Z['length']
?[]
:[...CreateArrayWithLengthX<X>, ...Multiplication<X,Y,[1,...Z]>]
type A = Multiplication<526,19>['length'] // 9994
type B = Multiplication<1,48>['length'] // error if 2nd interger exceed 47
playground
방법 2:
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['length']
: Multiplication<X,Y,[1,...Z],[...CreateArrayWithLengthX<X>,...V]>
type A= Multiplication<19,526> // 9994
type B= Multiplication<526,19> // 9994
제한: 최대 튜플 크기가 9999이므로 제품은 9999를 초과할 수 없습니다.
playground
두 번째 방법은 첫 번째 방법 두 번째 정수가 47보다 클 수 없기 때문에 더 좋습니다(방법 1 곱셈은 tail recursion이 아니지만 여전히 48이 아닌 50에서 오류가 발생할 것으로 예상했습니다. 흠...)
Reference
이 문제에 관하여(Typescript 숫자 리터럴 유형 X * Y 방법(곱셈)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tylim88/typescript-multiply-two-numeric-literal-types-28fd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)