type MyExclude<T, U> = T extends U ? never : T
Solution by Git-I985 #34701
// your answers
type MyExclude<T, U> = T extends U ? never : T
Solution by zeyuanHong0 #34690
type MyExclude<T, U> = T extends U ? never : T;
Solution by nathan2slime #34658
type MyExclude<T, U> = T extends U ? never : T
Solution by Hailey0930 #34638
type MyExclude<T, U> = T extends U ? never : T
Solution by DevShinnThant #34543
// your answers
type MyExclude<T, U> = T extends U ? never : T;
Solution by LeeKangHyun #34455
type MyExclude<T, U> = T extends U ? never : T;
Solution by ktim816 #34422
type MyExclude<T, U> = T extends U ? never : T
Solution by binhdv155127 #34339
type MyExclude<T, U> = T extends U ? never : T;
注意TS对联合类型会执行分配率
type C=Exclude<'a'|'b','a'|'c'> //'b'
//等价于
Exclude<'a','a'|'c'>|Exclude<'b','a'|'c'>
Solution by wxh-cyber #34334
type MyExclude<T, U> = T extends U ? never : T;
Solution by bkdragon0228 #34273
type MyExclude<T, U> = T extends U ? never : T
Solution by quitone #34191
Extract K from T, then we can check that K extends U
.
type MyExclude<T, U> = T extends infer K ? (K extends U ? never : K) : never
Solution by dev-jaemin #34158
T
에서 U
에 할당할 수 있는 타입을 제외하는 내장 제네릭 Exclude<T, U>
를 이를 사용하지 않고 구현하세요.
예시:
type Result = MyExclude<"a" | "b" | "c", "a">; // 'b' | 'c'
해당 문제는 조건문 타입 내에서의 extends에 대해서 이해하면 쉽게 풀이할 수 있습니다.
조건부 타입은 T extends U ? X : Y의 형태를 가지며, 이는 T가 U에 할당 가능하면 X 타입을 반환하고, 그렇지 않으면 Y 타입을 반환하는 타입입니다. (여기서 T 혹은 U를 사용하게 된다면, 해당 확인 단계에 포함한 인자를 넣게 됩니다. for in 문과 유사합니다.)
type MyExclude<T, U> = T extends U ? never : T;
/* _____________ 여기에 코드 입력 _____________ */
type MyExclude<T, U> = T extends U ? never : T;
/* _____________ 테스트 케이스 _____________ */
import type { Equal, Expect } from "@type-challenges/utils";
type cases = [
Expect<Equal<MyExclude<"a" | "b" | "c", "a">, "b" | "c">>,
Expect<Equal<MyExclude<"a" | "b" | "c", "a" | "b">, "c">>,
Expect<
Equal<MyExclude<string | number | (() => void), Function>, string | number>
>
];
Solution by adultlee #34122
type MyExclude<T, U extends any> = T extends U ? never : T;
Solution by ProvorovOleksii #34078
type MyExclude<T, U> = T extends U ? never : T
Solution by ouzexi #33967
type MyExclude<T, U> = T extends U ? never : T
Solution by iam1maker #33929
type MyExclude<T, U> = T extends U ? never : T
Solution by notsecret32 #33859
type MyExclude<T, U> = T extends U ? never : T;
Solution by veralex #33749
type MyExclude<T, U> = T extends U?never:T
Solution by d0422 #33732
type MyExclude<T, U> = T extends U ? never : T
Solution by laplace1009 #33701
type MyExclude<T, K> = T extends K ? never : T
extends
で条件分岐させてnever
返すのは思いつかなかった...
Solution by okabe-yuya #33647
type MyExclude<T, U> = Exclude<T,U>
Solution by okasyun #33629
type MyExclude<T, U> = T extends U ? never : T;
Solution by oo009pbh #33621
type MyExclude<T, U> = T extends U ? never : T
Solution by iamsukhe #33599
// 조건부타입을 이용해서 T가 U에 포함되는 경우 never로 빠지고, 아닌 경우는 그대로 타입을 제공한다.
// 조건부타입은 제공되는 타입이 여러개면 여러번 순회하며 확인한다.
type MyExclude<T, U> = T extends U ? never : T
Solution by kukjun #33588
type MyExclude<T, K> = T extends K ? never : T
Solution by Danny101201 #33560
type MyExclude<T, U> = T extends U ? never : T;
Solution by Kolufs #33521
// 你的答案
type MyExclude<T, U> = T extends U ? never : T
Solution by EurYellow #33428
// 你的答案
type MyExclude<T, U> = T extends U ? never : T
Solution by chenjieya #33398
type MyExclude<T, U> = Exclude<T, U>
Solution by Evgenij-Nekrasov #33360