Type Challenges Judge

Diff

提出詳細

// 片方にしかないフィールドを選ぶ // 両方のプロパティのユニオンをMapped Typesで反復する。キーを削除するには、as節でリネームするときにneverにする。 type Diff<O, O1> = { [K in keyof O | keyof O1 as K extends keyof O ? K extends keyof O1 ? never : K : K extends keyof O1 ? K : never ]: K extends keyof O ? K extends keyof O1 ? never : O[K] : K extends keyof O1 ? O1[K] : never }
提出日時2023-08-12 00:59:47
問題Diff
ユーザーtekihei2317
ステータスAccepted
テストケース
import type { Equal, Expect } from '@type-challenges/utils' type Foo = { name: string age: string } type Bar = { name: string age: string gender: number } type Coo = { name: string gender: number } type cases = [ Expect<Equal<Diff<Foo, Bar>, { gender: number }>>, Expect<Equal<Diff<Bar, Foo>, { gender: number }>>, Expect<Equal<Diff<Foo, Coo>, { age: string; gender: number }>>, Expect<Equal<Diff<Coo, Foo>, { age: string; gender: number }>>, ]