问题 #
在类型系统里实现 JavaScript 的 Array.includes
方法,这个类型接受两个参数,返回的类型要么是 true
要么是 false
。
举例来说,
type isPillarMen = Includes<['Kars', 'Esidisi', 'Wamuu', 'Santana'], 'Dio'> // expected to be `false`
解答 #
type Includes<T extends unknown[], U> = T extends [infer first, ...infer rest] ? U extends first ? true : Includes<rest, U> : false
拆分 #
T extends unknown[]
限制T
只能是数组类型- 通过解构和
infer
结合,每次拿出数组的第一个元素,然后和U
比较,如果相等,返回true
,否则递归调用进行判断