Skip to content

Instantly share code, notes, and snippets.

@anztrax
Created December 1, 2025 03:06
Show Gist options
  • Select an option

  • Save anztrax/101ba2f3e74bfab83c568a77c757bcbf to your computer and use it in GitHub Desktop.

Select an option

Save anztrax/101ba2f3e74bfab83c568a77c757bcbf to your computer and use it in GitHub Desktop.
Simple implementation of Includes in Typesscript
type Includes<T extends readonly any[], U> =
T extends [infer First, ...infer Rest]
? (
Equal<First, U> extends true
? true
: Includes<Rest, U>
)
: false
/* _____________ Test Cases _____________ */
import type { Equal, Expect } from '@type-challenges/utils'
type cases = [
Expect<Equal<Includes<['Kars', 'Esidisi', 'Wamuu', 'Santana'], 'Kars'>, true>>,
Expect<Equal<Includes<['Kars', 'Esidisi', 'Wamuu', 'Santana'], 'Dio'>, false>>,
Expect<Equal<Includes<[1, 2, 3, 5, 6, 7], 7>, true>>,
Expect<Equal<Includes<[1, 2, 3, 5, 6, 7], 4>, false>>,
Expect<Equal<Includes<[1, 2, 3], 2>, true>>,
Expect<Equal<Includes<[1, 2, 3], 1>, true>>,
Expect<Equal<Includes<[{}], { a: 'A' }>, false>>,
Expect<Equal<Includes<[boolean, 2, 3, 5, 6, 7], false>, false>>,
Expect<Equal<Includes<[true, 2, 3, 5, 6, 7], boolean>, false>>,
Expect<Equal<Includes<[false, 2, 3, 5, 6, 7], false>, true>>,
Expect<Equal<Includes<[{ a: 'A' }], { readonly a: 'A' }>, false>>,
Expect<Equal<Includes<[{ readonly a: 'A' }], { a: 'A' }>, false>>,
Expect<Equal<Includes<[1], 1 | 2>, false>>,
Expect<Equal<Includes<[1 | 2], 1>, false>>,
Expect<Equal<Includes<[null], undefined>, false>>,
Expect<Equal<Includes<[undefined], null>, false>>,
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment