Typescript類型體操 - FibonacciSequence

題目

中文

實現一個輸入參數爲數字 T 的泛型類型 Fibonacci<T>, 返回 T 對應的斐波那契數

斐波那契數列:
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...

示例:

type Result1 = Fibonacci<3>; // 2
type Result2 = Fibonacci<8>; // 21

English

Implement a generic Fibonacci<T> that takes a number T and returns its corresponding Fibonacci number.

The sequence starts:
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...

For example

type Result1 = Fibonacci<3>; // 2
type Result2 = Fibonacci<8>; // 21

答案

type Fibonacci<
    T extends number,
    ACC extends [any[], any[], any[]] = [[any], [any], [any, any]]
> = T extends 1 | 2
    ? 1
    : ACC[2]['length'] extends T
    ? ACC[0]['length']
    : Fibonacci<T, [[...ACC[0], ...ACC[1]], [...ACC[0]], [any, ...ACC[2]]]>;

在線演示

第二個泛型參數ACC的說明

第二個泛型參數ACC是一個元組; 元組中第一個元素是一個any[]類型的數組, 數組的長度表示 \(F_n\) ; 第二個元素代表也是一個any[]類型的數組, 數組的長度表示 \(F_{n-1}\) ; 第三個元素還是一個any[]類型是數組, 數組長度表示迭代次數

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