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;