Skip to content

Includes 实现

在类型系统里实现JavaScriptArray.includes方法,这个类型接受两个参数,返回的类型要么是true要么是false

例如:

ts

type isPillarMen = Includes<['Kars', 'Esidisi', 'Wamuu', 'Santana'], 'Dio'> // expected to be `false`
查看解答
ts
type MyEqual<A, B> = (<T>() => T extends A ? 1:0) extends (<T>() => T extends B ? 1 :0) ? true : false

type Includes<T extends readonly any[], U> = T extends [infer A, ...infer B] ?
  MyEqual<A, U> extends true ?
    true :
    (B extends [] ?
      false :
      (Includes<B, U> extends true ?true : false)
    )
  : false

Released under the MIT License.