Typescript 경고 8: 교차로 작동하지 않는 유형 수준 평등

export type IsSame<T, U> = (<G>() => G extends T ? 1 : 2) extends <
    G
>() => G extends U ? 1 : 2
    ? true
    : false

type A = IsSame<{a:1, b:2},{a:1, b:2}> // true
//   ^?

type B = IsSame<{ a:1, b:2 },{ a:1 } & { b:2 }> // false
//   ^?


배경: Type Level Equality

playground

해결책:

export type IsSame<T, U> = (<G>() => G extends T ? 1 : 2) extends <
    G
>() => G extends U ? 1 : 2
    ? true
    : false

export type ReMap<T> = T extends Record<string, unknown>
    ? { [Key in keyof T]: T[Key] }
    : T

type A = IsSame<{ a:1, b:2 }, { a:1, b:2 }> // true
//   ^?

type B = IsSame<ReMap<{ a:1, b:2 }>, ReMap<{ a:1 } & { b:2 }>> // true
//   ^?



playground
RemapIsSame 결합

좋은 웹페이지 즐겨찾기