Skip to content

Anyof

题目

在类型系统中实现类似于 Python 中 any 函数。

类型接收一个数组,如果数组中任一个元素为真,则返回 true,否则返回 false

如果数组为空,返回 false

例如:

ts
type Sample1 = AnyOf<[1, "", false, [], {}]>; // expected to be true.
type Sample2 = AnyOf<[0, "", false, [], {}]>; // expected to be false.

解答

ts

- 对于数组,使用 `T[number]` 即可递归提取数组的 item
- 使用 `Record<string, never>` 判断对象类型
- 使用联合类型 `|` 来组装所有判定为 `false` 的类型组合

type AnyOf<T extends readonly any[]> = T[number] extends
  | 0
  | ""
  | false
  | []
  | Record<string, never>
  | undefined
  | null
  ? false
  : true;

Released under the MIT License.