00043-easy-exclude

Back

// 你的答案
type MyExclude<T, U> = T extends U ? never : T

Solution by song4613107 #35789

// 你的答案
type MyExclude<T, U> = T extends U ? never : T

Solution by song4613107 #35788

type MyExclude<T, U> = T extends U ? never : T;

Solution by Sensuele #35762

type MyExclude<T, U> = T extends U ? never : T; 

Solution by thukyaw11 #35529

type MyExclude<T, U> = T extends U ? never : T;

Solution by gangnamssal #35478

type MyExclude<T, U> = T extends U ? never : T

Solution by RanungPark #35433

// your answers
type initial = "a" | "b" | "c";

type MyExclude<T, V> = T extends V ? never : T;

const data: MyExclude<initial, "c"> = "a";
const data2: MyExclude<initial, "c"> = "b";

Solution by Sathiyapramod #35413

type MyExclude<T, U> = T extends U ? never : T

Solution by gyeounjeong #35355

type MyExclude<T, U> = T extends U ? never : T;

Solution by Kim-Ji-Seop #35337

type Exclude<T extends unknown, U extends T | PropertyKey | unknown = T> = T extends U ? never : T;

type MixedTypes = 'apple' | 'banana' | 1 | 2 | (() => void) | { key: string } | false;

type Test1 = Exclude<MixedTypes, 'apple' | 'banana'>; // 'apple' | 'orange'
type Test2 = Exclude<MixedTypes, 1 | 2>; // 'apple' | 'banana' | (() => void) | { key: string } | false
type Test3 = Exclude<MixedTypes, false>; // 'apple' | 'banana' | 1 | 2 | (() => void) | { key: string }
type Test4 = Exclude<MixedTypes, (() => void) | { key: string }>; // 'apple' | 'banana' | 1 | 2 | false

type Test5 = Exclude<MixedTypes, string> // false | {key: string;} | 1 | 2 | (() => void)
type Test6 = Exclude<MixedTypes, string | number> // false | {key: string;} | (() => void)
type Test7 = Exclude<MixedTypes, string | number | boolean> // {key: string;} | (() => void)
type Test8 = Exclude<MixedTypes, Function> // {key: string;}

Solution by w3Scribe #35198

type MyExclude<T, U> = T extends U ? never : T;

Solution by raeyoung-kim #34938

type MyExclude<T, U> = T extends U ? never : T

Solution by 56aiden90 #34879

type MyExclude<T, U extends Partial<T>> = T extends U ? never : T

Solution by nguyste #34854

type MyExclude<T,U> = T extends U ? never : T

Solution by xiaosi-ss #34841

type MyExclude<T, U> = T extends U ? never : T

Solution by eunsukimme #34811

type MyExclude<T, U> = T extends U ? never : T

Solution by kang-kibong #34745

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 devshinthant #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;

solution

/* _____________ 여기에 코드 입력 _____________ */

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