Typescript 类型体操 —— Permutation

1,201 阅读1分钟

🤔️要求

如下面例子所示,实现一个 Permutation 类型,当输入一个 union 类型时,返回一个包含该 union类型的全排列类型数组

type perm = Permutation<'A' | 'B' | 'C'>; // ['A', 'B', 'C'] | ['A', 'C', 'B'] | ['B', 'A', 'C'] | ['B', 'C', 'A'] | ['C', 'A', 'B'] | ['C', 'B', 'A']

📖知识点

function assertNever<T>(value: T extends never ? true : false) {}
assertNever<never>(true)
//                  ^^^^ TS Error (2345)
// Argument of type 'boolean' is not assignable to parameter of type 'never'.
在一个范型变量中使用 Never, 不会正常的进行 extends ,而是直接返回一个 never 。
具体原因可看下面链接。
为了判断一个 范型变量 T 是否为 never, 应该使用 [T] extends [never]

🔗知识链接

  1. 知识点: isNever_01
  2. 知识点: isNever_02

😢问题 & 解答

  1. 答题入口: 全排列
  2. 解答