type-challenges:Subsequence

25 阅读1分钟

Subsequence

问题描述

给定一个没有重复元素的数组,返回所有可能得子序列。子序列是可以通过从数组中删除一些或不删除任何元素而得到的序列,而不改变剩余元素的顺序。

举例:

type A = Subsequence<[1, 2]> // [] | [1] | [2] | [1, 2]
// ============= Test Cases =============
import type { Equal, Expect } from './test-utils'type cases = [
  Expect<Equal<Subsequence<[1, 2]>, [] | [1] | [2] | [1, 2]>>,
  Expect<Equal<Subsequence<[1, 2, 3]>, [] | [1] | [2] | [1, 2] | [3] | [1, 3] | [2, 3] | [1, 2, 3] >>,
]
​
​
// ============= Your Code Here =============
// 答案
type Subsequence<T extends any[]> = 
  T extends [infer F, ...infer Rest]
    ? [F, ...Subsequence<Rest>] | Subsequence<Rest>
    : T