Exclude<T, U>

개념

한마디로, T에서 U를 제외시킨 Type
U를 제외시킬 수 없다면 T 그대로 리턴
T에 union type 받을 수 있음

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

Examples

Only number

type numberOnly = Exclude<string | number, string>
const a: numberOnly = 5
// const a: number

how it works

Exclude<string | number, number>
    => Exclude<string, number> | Exclude<number, number>
    => string | never =>
    => string

Remove props in interface

interface Student {
  name: string
  age: number
  address: string
  gpa: number
}

type refiendStudent = Exclude<keyof Student, 'address'>
//type refiendStudent = "name" | "age" | "gpa"

Remove itself

type neverType = Exclude<string, string>
// type neverType = never

참고

https://velog.io/@ggong/Typescript의-유틸리티-타입-1-Record-Extract-Pick
https://stackoverflow.com/questions/56916532/difference-b-w-only-exclude-and-omit-pick-exclude-typescript