Skip to content

Commit

Permalink
add more type level tests for Types.MergeRight (#3828)
Browse files Browse the repository at this point in the history
  • Loading branch information
gcanti authored Oct 23, 2024
1 parent c1afd55 commit c5d537f
Showing 1 changed file with 41 additions and 9 deletions.
50 changes: 41 additions & 9 deletions packages/effect/dtslint/Types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,24 +57,56 @@ hole<Types.Equals<{ a: number }, { a: number }>>()
hole<Types.Equals<{ a: number }, { b: number }>>()

// -------------------------------------------------------------------------------------
// MergeLeft
// MergeRecord
// -------------------------------------------------------------------------------------

// $ExpectType { a: number; b: number; }
hole<Types.MergeLeft<{ a: number; b: number }, { a: string }>>()
// No tests needed as MergeRecord is just an alias of MergeLeft

// $ExpectType { readonly a?: number; b: number; readonly c?: string; }
hole<Types.MergeLeft<{ readonly a?: number; b: number }, { readonly c?: string }>>()
// -------------------------------------------------------------------------------------
// MergeLeft
// -------------------------------------------------------------------------------------

// No tests needed as MergeLeft is just MergeRight with arguments flipped

// -------------------------------------------------------------------------------------
// MergeRight
// -------------------------------------------------------------------------------------

// $ExpectType { a: string; b: number; }
hole<Types.MergeRight<{ a: number; b: number }, { a: string }>>()
// mutable overwrites mutable
// $ExpectType { a: string; c: boolean; b: number; }
hole<Types.MergeRight<{ a: number; b: number }, { a: string; c: boolean }>>()

// mutable overwrites readonly
// $ExpectType { a: string; c: boolean; b: number; }
hole<Types.MergeRight<{ readonly a: number; b: number }, { a: string; c: boolean }>>()

// readonly overwrites mutable
// $ExpectType { readonly a: string; c: boolean; b: number; }
hole<Types.MergeRight<{ a: number; b: number }, { readonly a: string; c: boolean }>>()

// required overwrites optional
// $ExpectType { a: string; c: boolean; b: number; }
hole<Types.MergeRight<{ a?: number; b: number }, { a: string; c: boolean }>>()

// optional overwrites optional
// $ExpectType { a?: string; c: boolean; b: number; }
hole<Types.MergeRight<{ a?: number; b: number }, { a?: string; c: boolean }>>()

// optional overwrites required
// $ExpectType { a?: string; c: boolean; b: number; }
hole<Types.MergeRight<{ a: number; b: number }, { a?: string; c: boolean }>>()

// readonly optional overwrites mutable required
// $ExpectType { readonly a?: string; c: boolean; b: number; }
hole<Types.MergeRight<{ a: number; b: number }, { readonly a?: string; c: boolean }>>()

// mutable required overwrites readonly optional
// $ExpectType { a: string; c: boolean; b: number; }
hole<Types.MergeRight<{ readonly a?: number; b: number }, { a: string; c: boolean }>>()

// $ExpectType { readonly a?: string; b: number; }
hole<Types.MergeRight<{ a: number; b: number }, { readonly a?: string }>>()
// optionality of non involved keys must be preserved
// $ExpectType { readonly c?: string; readonly a?: number; b: number; }
hole<Types.MergeRight<{ readonly a?: number; b: number }, { readonly c?: string }>>()

// -------------------------------------------------------------------------------------
// Mutable
Expand Down

0 comments on commit c5d537f

Please sign in to comment.