// 你的答案
type Includes<T extends unknown[], K> = K extends keyof T[number] ? true : false;
Solution by SZGG2333 #33602
type Includes<P extends readonly any[], U> = true extends {
[K in keyof P]: (<T>() => T extends U ? 1 : 2) extends <T>() => T extends P[K] ? 1 : 2
? true
: false;
}[number]
? true : false;
Solution by Alex-Nicalace #33406
// 여기 풀이를 입력하세요
type Includes<T extends readonly any[], U> = T extends [infer F, ...infer Rest]
? Equal<F, U> extends true
? true
: Includes<Rest, U>
: false;
Solution by awesomelon #33368
type Includes<T extends readonly any[], U> =
T extends [infer R, ...infer S]
? Equal<R, U> extends true
? true
: Includes<S, U>
: false
Solution by cognitiones #33342
type Includes<T extends readonly any[], U> =
T extends [infer K , ...infer Rest] ?
Equal<K,U> extends true ?
true :
Includes<Rest,U>
:false
Solution by daishi-motoyama #33341
type Includes<T extends any[], U> = T extends [infer First, ...infer Rest]
? Equal<First, U> extends true ? true : Includes<Rest,U>
: false;
// I couldn’t implement a correct comparison, so I resorted to this solution 😄
Solution by mardukevich #33340
type Includes<T extends readonly any[], U> = {
[P in T[number]]: true
}[U] extends true ? true : false
Solution by Skytim #33302
type isEqual<A, B> = (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? true : false
type Includes<T extends readonly any[], U> = T extends [infer F, ...infer R]
? isEqual<U, F> extends true ? true : Includes<R, U> : false
Solution by HowCanLove #33261
type Includes<T extends readonly any[], U> = T extends readonly [ infer First, ...infer Other] ? Equal<First, U> extends true ? true : Includes<[...Other], U> : false
Solution by mosey-san #33119
type IsEqual<T, U> =
(<G>() => G extends T ? 1 : 2) extends
(<G>() => G extends U ? 1 : 2)
? true
: false
type Includes<T extends readonly any[], U> =
T extends [infer First, ...infer Rest]
? IsEqual<First, U> extends true
? true
: Includes<Rest, U>
: false
Solution by KenjiGinjo #33088
type Includes<T extends readonly any[], U> = T extends [infer FIRST , ...infer REST] ? Equal<FIRST, U> extends true? true : Includes<REST, U> : false; ```
Solution by RanungPark #33048
// extends关键字
type Includes<T extends readonly any[], U> = U extends T[number] ? true : false;
Solution by CAN1177 #32847
type IsEqual<X, Y> = (<T>() => T extends X
? 1
: 2
) extends <T>() => T extends Y
? 1
: 2
? true
: false;
type Includes<T extends readonly any[], U> = T extends [infer A, ...infer B]
? IsEqual<A, U> extends true
? true
: Includes<B, U>
: false;
Solution by Yasunori-aloha #32771
type MyIncludes<T, U> = U extends T[keyof T] ? true : false;
Solution by fuguxu #32631
type Includes<Value extends any[], Item> =
IsEqual<Value[0], Item> extends true
? true
: Value extends [Value[0], ...infer rest]
? Includes<rest, Item>
: false;
Solution by wubrafiq807 #32545
type IsEqual<X, Y> =
(<Z>() => Z extends X ? 1 : 2) extends
(<Z>() => Z extends Y ? 1 : 2)
? true
: false;
type Includes<T extends readonly any[], U> =
T extends [infer First, ...infer Rest]
? IsEqual<First, U> extends true
? true
: Includes<Rest, U>
: false
정해지지 않은 임의의 타입(Z) 를 기반으로 할당 가능성을 체크하는 조건부 타입은 평가가 지연된다. 그리고 지연된 조건부 타입들간의 할당 가능성 체크는 타입스크립트 내부의 isTypeIdenticalTo
로직을 사용하는데 이 로직은
위의 두 가지 조건을 모두 만족해야 할당 가능하다고 판단한다.
여기서 제약 조건(X, Y)이 같아야 한다는 조건에 의해 IsEqual이 의도대로 작동하게 된다.
Solution by dev-hobin #32145
type Includes<T extends readonly any[], U> = T extends [infer F, ...infer R]
? (Equal<F, U>) extends true ? true : Includes<R, U>
: false
It compares one by one. Firstly it infers the first element of the array T and compares with U, if is not equals then recursively compares with the rest of the array R, if the array is empty, then it returns false
Solution by joyanedel #32132
type IsEqual<T, U> =
(<G>() => G extends T ? 1 : 2) extends
(<G>() => G extends U ? 1 : 2)
? true
: false;
type Includes<
T extends readonly any[],
U
> = T extends [infer PFirst, ...infer PRest]
? IsEqual<PFirst, U> extends true
? true
: Includes<PRest, U>
: false;
Solution by kino6052 #32034
// 你的答案
type TupleToObject<T extends any[]> = {
[K in T[number]]: K;
};
type Includes<T extends any[], P> = P extends keyof TupleToObject<T> ? true : false;
Solution by ruofee #32001
// your answers
type Includes<T extends readonly any[], U> = Equal<U, T[0]> extends true
? T['length'] extends 0 ? false : true
: T extends [T[0], ...infer Rest] ? Includes<Rest, U> : false
Solution by Rustamaha #31941
type Includes<T extends unknown[], U> = U extends T[number] ? true: false
Solution by Artemiks24 #31815
type isPillarMen = Includes<['Kars', 'Esidisi', 'Wamuu', 'Santana'], 'Dio'> // expected to be `false`
type Includes<T extends string[], U> = U extends T[number] ? true : false
Solution by anovicenko74 #31721
// your answers
type Includes<T extends readonly any[], U> =
T extends [infer L, ...infer R]
? Equal<L, U> extends true ? true : Includes<R, U>
: false
Solution by pea-sys #31695
type Includes<T extends readonly any[], U> = T extends [infer F, ...infer R] ? Equal<F, U> extends true ? true : Includes<R, U> : false;
Solution by kai-phan #31600
type Includes<T extends readonly any[], U> =
T extends [infer A, ...infer B] // Check if T is a tuple with at least one element
? Equal<A, U> extends true // Check if the first element A is equal to U
? true // If the first element A is equal to U, return true
: Includes<B, U> // If not equal, recursively check the rest of the tuple B
: false; // If T is an empty tuple or not a tuple, return false
Solution by RAY-EZ #31483
// your answers
type Includes<T extends readonly any[], U> = U extends T[number] ? true : false
Solution by AhmedRagabKamal #31372
type Includes<T extends readonly any[], U> =
T extends [infer K , ...infer Rest] ?
Equal<K,U> extends true ?
true :
Includes<Rest,U>
:false
Solution by onishi-kohei #31352
// your answers
type IsEqual<T, U> =
(<G>() => G extends T ? 1 : 2) extends
(<G>() => G extends U ? 1 : 2)
? true
: false;
type Includes<T extends readonly any[], U> = T extends [infer First, ...infer Rest] ? IsEqual<First, U> extends true ? true : Includes<Rest, U> : false;
Solution by yuisato1025 #31345
type Includes<T extends readonly any[], U> = T extends [
infer Head,
...infer Tail
]
? Equal<Head, U> extends true
? true
: Includes<Tail, U>
: false;
Solution by vipulpathak113 #31341
type Includes<T extends readonly unknown[], U> = T extends [infer L , ...infer R] ? Equal<L,U> extends true ? true: Includes<R,U> : false
Solution by Zhang-Lu-Bin #31310