Typescript類型體操 - MinusOne

題目

中文

給定一個正整數作爲類型的參數,要求返回的類型是該數字減 1。

例如:

type Zero = MinusOne<1>; // 0
type FiftyFour = MinusOne<55>; // 54

English

Given a number (always positive) as a type. Your type should return the number decreased by one.

For example:

type Zero = MinusOne<1>; // 0
type FiftyFour = MinusOne<55>; // 54

答案

type MinusOne<T extends number, A extends any[] = []> = T extends [
    any,
    ...A
]['length']
    ? A['length']
    : T extends [any, any, ...A]['length']
    ? [any, ...A]['length']
    : MinusOne<T, [0, 0, ...A]>;

支持 T 最大等於2000, 每次遞歸時, 數組的長度+2, T = 2000 時, 會產生1000此的遞歸, 這也是 typescript 所支持遞歸深度的極限了

在線演示

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章