首页 > 其他分享 >Typescript类型体操 - FibonacciSequence

Typescript类型体操 - FibonacciSequence

时间:2022-10-02 16:47:29浏览次数:75  
标签:ACC FibonacciSequence Typescript 体操 Fibonacci 数组 type any 21

题目

中文

实现一个输入参数为数字 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[]类型是数组, 数组长度表示迭代次数

标签:ACC,FibonacciSequence,Typescript,体操,Fibonacci,数组,type,any,21
From: https://www.cnblogs.com/laggage/p/type-challenge-fibonacci-sequence.html

相关文章