🤔️要求
如下面例子所示,实现一个 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]