Test Diff and Omit

This commit is contained in:
Nathan Shively-Sanders 2018-01-11 16:30:05 -08:00
parent 12b80f3183
commit baf31ec52e
4 changed files with 82 additions and 0 deletions

View File

@ -0,0 +1,10 @@
//// [indexedAccessRetainsIndexSignature.ts]
type Diff<T extends string, U extends string> =
({ [P in T]: P } & { [P in U]: never } & { [x: string]: never })[T]
type Omit<U, K extends keyof U> = Pick<U, Diff<keyof U, K>>
type O = Omit<{ a: number, b: string }, 'a'>
//// [indexedAccessRetainsIndexSignature.js]

View File

@ -0,0 +1,33 @@
=== tests/cases/compiler/indexedAccessRetainsIndexSignature.ts ===
type Diff<T extends string, U extends string> =
>Diff : Symbol(Diff, Decl(indexedAccessRetainsIndexSignature.ts, 0, 0))
>T : Symbol(T, Decl(indexedAccessRetainsIndexSignature.ts, 0, 10))
>U : Symbol(U, Decl(indexedAccessRetainsIndexSignature.ts, 0, 27))
({ [P in T]: P } & { [P in U]: never } & { [x: string]: never })[T]
>P : Symbol(P, Decl(indexedAccessRetainsIndexSignature.ts, 1, 8))
>T : Symbol(T, Decl(indexedAccessRetainsIndexSignature.ts, 0, 10))
>P : Symbol(P, Decl(indexedAccessRetainsIndexSignature.ts, 1, 8))
>P : Symbol(P, Decl(indexedAccessRetainsIndexSignature.ts, 1, 26))
>U : Symbol(U, Decl(indexedAccessRetainsIndexSignature.ts, 0, 27))
>x : Symbol(x, Decl(indexedAccessRetainsIndexSignature.ts, 1, 48))
>T : Symbol(T, Decl(indexedAccessRetainsIndexSignature.ts, 0, 10))
type Omit<U, K extends keyof U> = Pick<U, Diff<keyof U, K>>
>Omit : Symbol(Omit, Decl(indexedAccessRetainsIndexSignature.ts, 1, 71))
>U : Symbol(U, Decl(indexedAccessRetainsIndexSignature.ts, 2, 10))
>K : Symbol(K, Decl(indexedAccessRetainsIndexSignature.ts, 2, 12))
>U : Symbol(U, Decl(indexedAccessRetainsIndexSignature.ts, 2, 10))
>Pick : Symbol(Pick, Decl(lib.d.ts, --, --))
>U : Symbol(U, Decl(indexedAccessRetainsIndexSignature.ts, 2, 10))
>Diff : Symbol(Diff, Decl(indexedAccessRetainsIndexSignature.ts, 0, 0))
>U : Symbol(U, Decl(indexedAccessRetainsIndexSignature.ts, 2, 10))
>K : Symbol(K, Decl(indexedAccessRetainsIndexSignature.ts, 2, 12))
type O = Omit<{ a: number, b: string }, 'a'>
>O : Symbol(O, Decl(indexedAccessRetainsIndexSignature.ts, 2, 59))
>Omit : Symbol(Omit, Decl(indexedAccessRetainsIndexSignature.ts, 1, 71))
>a : Symbol(a, Decl(indexedAccessRetainsIndexSignature.ts, 5, 15))
>b : Symbol(b, Decl(indexedAccessRetainsIndexSignature.ts, 5, 26))

View File

@ -0,0 +1,33 @@
=== tests/cases/compiler/indexedAccessRetainsIndexSignature.ts ===
type Diff<T extends string, U extends string> =
>Diff : ({ [P in T]: P; } & { [P in U]: never; } & { [x: string]: never; })[T]
>T : T
>U : U
({ [P in T]: P } & { [P in U]: never } & { [x: string]: never })[T]
>P : P
>T : T
>P : P
>P : P
>U : U
>x : string
>T : T
type Omit<U, K extends keyof U> = Pick<U, Diff<keyof U, K>>
>Omit : Pick<U, ({ [P in T]: P; } & { [P in U]: never; } & { [x: string]: never; })[keyof U]>
>U : U
>K : K
>U : U
>Pick : Pick<T, K>
>U : U
>Diff : ({ [P in T]: P; } & { [P in U]: never; } & { [x: string]: never; })[T]
>U : U
>K : K
type O = Omit<{ a: number, b: string }, 'a'>
>O : Pick<{ a: number; b: string; }, "b">
>Omit : Pick<U, ({ [P in T]: P; } & { [P in U]: never; } & { [x: string]: never; })[keyof U]>
>a : number
>b : string

View File

@ -0,0 +1,6 @@
type Diff<T extends string, U extends string> =
({ [P in T]: P } & { [P in U]: never } & { [x: string]: never })[T]
type Omit<U, K extends keyof U> = Pick<U, Diff<keyof U, K>>
type O = Omit<{ a: number, b: string }, 'a'>