From 34feb07d6ff356c6f0ce1c7994b78703d5ca7211 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Thu, 18 Apr 2019 17:20:30 -0700 Subject: [PATCH] Accept new baselines --- .../keyofAndIndexedAccess2.errors.txt | 41 +++++++++++++- .../reference/keyofAndIndexedAccess2.js | 21 ++++++++ .../reference/keyofAndIndexedAccess2.symbols | 53 +++++++++++++++++++ .../reference/keyofAndIndexedAccess2.types | 50 +++++++++++++++++ 4 files changed, 164 insertions(+), 1 deletion(-) diff --git a/tests/baselines/reference/keyofAndIndexedAccess2.errors.txt b/tests/baselines/reference/keyofAndIndexedAccess2.errors.txt index aef57c129a3..279797244f2 100644 --- a/tests/baselines/reference/keyofAndIndexedAccess2.errors.txt +++ b/tests/baselines/reference/keyofAndIndexedAccess2.errors.txt @@ -25,9 +25,17 @@ tests/cases/conformance/types/keyof/keyofAndIndexedAccess2.ts(68,3): error TS232 tests/cases/conformance/types/keyof/keyofAndIndexedAccess2.ts(108,5): error TS2322: Type '123' is not assignable to type 'Type[K]'. Type '123' is not assignable to type '123 & "some string"'. Type '123' is not assignable to type '"some string"'. +tests/cases/conformance/types/keyof/keyofAndIndexedAccess2.ts(126,1): error TS2322: Type 'Demo<{ b: string; }>' is not assignable to type 'Demo<{ a: number; }>'. + Property 'a' is missing in type '{ b: string; }' but required in type '{ a: number; }'. +tests/cases/conformance/types/keyof/keyofAndIndexedAccess2.ts(128,1): error TS2322: Type 'Demo<{ a: number; }>' is not assignable to type 'Demo<{ b: string; }>'. + Property 'b' is missing in type '{ a: number; }' but required in type '{ b: string; }'. +tests/cases/conformance/types/keyof/keyofAndIndexedAccess2.ts(130,1): error TS2322: Type 'Demo<{ a: number; }>' is not assignable to type 'Demo<{ a: number; b: string; }>'. + Property 'b' is missing in type '{ a: number; }' but required in type '{ a: number; b: string; }'. +tests/cases/conformance/types/keyof/keyofAndIndexedAccess2.ts(131,1): error TS2322: Type 'Demo<{ b: string; }>' is not assignable to type 'Demo<{ a: number; b: string; }>'. + Property 'a' is missing in type '{ b: string; }' but required in type '{ a: number; b: string; }'. -==== tests/cases/conformance/types/keyof/keyofAndIndexedAccess2.ts (23 errors) ==== +==== tests/cases/conformance/types/keyof/keyofAndIndexedAccess2.ts (27 errors) ==== function f1(obj: { a: number, b: 0 | 1, c: string }, k0: 'a', k1: 'a' | 'b', k2: 'a' | 'b' | 'c') { obj[k0] = 1; obj[k0] = 2; @@ -194,4 +202,35 @@ tests/cases/conformance/types/keyof/keyofAndIndexedAccess2.ts(108,5): error TS23 type StrictExclude = T extends StrictExtract ? never : T; type A = { [Q in { [P in keyof T]: P; }[keyof T]]: T[Q]; }; type B = A<{ [Q in keyof T]: StrictExclude, {}>; }>; + + // Repro from 31006 + + type Demo = (key: K, val: T[K]) => void; + + declare let da: Demo<{ a: number }>; + declare let db: Demo<{ b: string }>; + declare let dc: Demo<{ a: number, b: string }>; + + da = db; // Error + ~~ +!!! error TS2322: Type 'Demo<{ b: string; }>' is not assignable to type 'Demo<{ a: number; }>'. +!!! error TS2322: Property 'a' is missing in type '{ b: string; }' but required in type '{ a: number; }'. +!!! related TS2728 tests/cases/conformance/types/keyof/keyofAndIndexedAccess2.ts:122:24: 'a' is declared here. + da = dc; + db = da; // Error + ~~ +!!! error TS2322: Type 'Demo<{ a: number; }>' is not assignable to type 'Demo<{ b: string; }>'. +!!! error TS2322: Property 'b' is missing in type '{ a: number; }' but required in type '{ b: string; }'. +!!! related TS2728 tests/cases/conformance/types/keyof/keyofAndIndexedAccess2.ts:123:24: 'b' is declared here. + db = dc; + dc = da; // Error + ~~ +!!! error TS2322: Type 'Demo<{ a: number; }>' is not assignable to type 'Demo<{ a: number; b: string; }>'. +!!! error TS2322: Property 'b' is missing in type '{ a: number; }' but required in type '{ a: number; b: string; }'. +!!! related TS2728 tests/cases/conformance/types/keyof/keyofAndIndexedAccess2.ts:124:35: 'b' is declared here. + dc = db; // Error + ~~ +!!! error TS2322: Type 'Demo<{ b: string; }>' is not assignable to type 'Demo<{ a: number; b: string; }>'. +!!! error TS2322: Property 'a' is missing in type '{ b: string; }' but required in type '{ a: number; b: string; }'. +!!! related TS2728 tests/cases/conformance/types/keyof/keyofAndIndexedAccess2.ts:124:24: 'a' is declared here. \ No newline at end of file diff --git a/tests/baselines/reference/keyofAndIndexedAccess2.js b/tests/baselines/reference/keyofAndIndexedAccess2.js index 1788c40563c..4f003a10594 100644 --- a/tests/baselines/reference/keyofAndIndexedAccess2.js +++ b/tests/baselines/reference/keyofAndIndexedAccess2.js @@ -115,6 +115,21 @@ type StrictExtract = T extends U ? U extends T ? T : never : never; type StrictExclude = T extends StrictExtract ? never : T; type A = { [Q in { [P in keyof T]: P; }[keyof T]]: T[Q]; }; type B = A<{ [Q in keyof T]: StrictExclude, {}>; }>; + +// Repro from 31006 + +type Demo = (key: K, val: T[K]) => void; + +declare let da: Demo<{ a: number }>; +declare let db: Demo<{ b: string }>; +declare let dc: Demo<{ a: number, b: string }>; + +da = db; // Error +da = dc; +db = da; // Error +db = dc; +dc = da; // Error +dc = db; // Error //// [keyofAndIndexedAccess2.js] @@ -190,3 +205,9 @@ export function getEntity(id, state) { function get123() { return 123; // Error } +da = db; // Error +da = dc; +db = da; // Error +db = dc; +dc = da; // Error +dc = db; // Error diff --git a/tests/baselines/reference/keyofAndIndexedAccess2.symbols b/tests/baselines/reference/keyofAndIndexedAccess2.symbols index abbe38fd5c9..19fe3252462 100644 --- a/tests/baselines/reference/keyofAndIndexedAccess2.symbols +++ b/tests/baselines/reference/keyofAndIndexedAccess2.symbols @@ -434,3 +434,56 @@ type B = A<{ [Q in keyof T]: StrictExclude, {}>; }>; >Q : Symbol(Q, Decl(keyofAndIndexedAccess2.ts, 115, 20)) >V : Symbol(V, Decl(keyofAndIndexedAccess2.ts, 115, 9)) +// Repro from 31006 + +type Demo = (key: K, val: T[K]) => void; +>Demo : Symbol(Demo, Decl(keyofAndIndexedAccess2.ts, 115, 69)) +>T : Symbol(T, Decl(keyofAndIndexedAccess2.ts, 119, 10)) +>K : Symbol(K, Decl(keyofAndIndexedAccess2.ts, 119, 16)) +>T : Symbol(T, Decl(keyofAndIndexedAccess2.ts, 119, 10)) +>key : Symbol(key, Decl(keyofAndIndexedAccess2.ts, 119, 35)) +>K : Symbol(K, Decl(keyofAndIndexedAccess2.ts, 119, 16)) +>val : Symbol(val, Decl(keyofAndIndexedAccess2.ts, 119, 42)) +>T : Symbol(T, Decl(keyofAndIndexedAccess2.ts, 119, 10)) +>K : Symbol(K, Decl(keyofAndIndexedAccess2.ts, 119, 16)) + +declare let da: Demo<{ a: number }>; +>da : Symbol(da, Decl(keyofAndIndexedAccess2.ts, 121, 11)) +>Demo : Symbol(Demo, Decl(keyofAndIndexedAccess2.ts, 115, 69)) +>a : Symbol(a, Decl(keyofAndIndexedAccess2.ts, 121, 22)) + +declare let db: Demo<{ b: string }>; +>db : Symbol(db, Decl(keyofAndIndexedAccess2.ts, 122, 11)) +>Demo : Symbol(Demo, Decl(keyofAndIndexedAccess2.ts, 115, 69)) +>b : Symbol(b, Decl(keyofAndIndexedAccess2.ts, 122, 22)) + +declare let dc: Demo<{ a: number, b: string }>; +>dc : Symbol(dc, Decl(keyofAndIndexedAccess2.ts, 123, 11)) +>Demo : Symbol(Demo, Decl(keyofAndIndexedAccess2.ts, 115, 69)) +>a : Symbol(a, Decl(keyofAndIndexedAccess2.ts, 123, 22)) +>b : Symbol(b, Decl(keyofAndIndexedAccess2.ts, 123, 33)) + +da = db; // Error +>da : Symbol(da, Decl(keyofAndIndexedAccess2.ts, 121, 11)) +>db : Symbol(db, Decl(keyofAndIndexedAccess2.ts, 122, 11)) + +da = dc; +>da : Symbol(da, Decl(keyofAndIndexedAccess2.ts, 121, 11)) +>dc : Symbol(dc, Decl(keyofAndIndexedAccess2.ts, 123, 11)) + +db = da; // Error +>db : Symbol(db, Decl(keyofAndIndexedAccess2.ts, 122, 11)) +>da : Symbol(da, Decl(keyofAndIndexedAccess2.ts, 121, 11)) + +db = dc; +>db : Symbol(db, Decl(keyofAndIndexedAccess2.ts, 122, 11)) +>dc : Symbol(dc, Decl(keyofAndIndexedAccess2.ts, 123, 11)) + +dc = da; // Error +>dc : Symbol(dc, Decl(keyofAndIndexedAccess2.ts, 123, 11)) +>da : Symbol(da, Decl(keyofAndIndexedAccess2.ts, 121, 11)) + +dc = db; // Error +>dc : Symbol(dc, Decl(keyofAndIndexedAccess2.ts, 123, 11)) +>db : Symbol(db, Decl(keyofAndIndexedAccess2.ts, 122, 11)) + diff --git a/tests/baselines/reference/keyofAndIndexedAccess2.types b/tests/baselines/reference/keyofAndIndexedAccess2.types index 4eccf23a804..f8ede140f4a 100644 --- a/tests/baselines/reference/keyofAndIndexedAccess2.types +++ b/tests/baselines/reference/keyofAndIndexedAccess2.types @@ -437,3 +437,53 @@ type A = { [Q in { [P in keyof T]: P; }[keyof T]]: T[Q]; }; type B = A<{ [Q in keyof T]: StrictExclude, {}>; }>; >B : A<{ [Q in keyof T]: StrictExclude, {}>; }>, {}>; }>, {}>; }>, {}>; }>, {}>; }>, {}>; }>, {}>; }>, {}>; }>, {}>; }>, {}>; }>, {}>; }> +// Repro from 31006 + +type Demo = (key: K, val: T[K]) => void; +>Demo : Demo +>key : K +>val : T[K] + +declare let da: Demo<{ a: number }>; +>da : Demo<{ a: number; }> +>a : number + +declare let db: Demo<{ b: string }>; +>db : Demo<{ b: string; }> +>b : string + +declare let dc: Demo<{ a: number, b: string }>; +>dc : Demo<{ a: number; b: string; }> +>a : number +>b : string + +da = db; // Error +>da = db : Demo<{ b: string; }> +>da : Demo<{ a: number; }> +>db : Demo<{ b: string; }> + +da = dc; +>da = dc : Demo<{ a: number; b: string; }> +>da : Demo<{ a: number; }> +>dc : Demo<{ a: number; b: string; }> + +db = da; // Error +>db = da : Demo<{ a: number; }> +>db : Demo<{ b: string; }> +>da : Demo<{ a: number; }> + +db = dc; +>db = dc : Demo<{ a: number; b: string; }> +>db : Demo<{ b: string; }> +>dc : Demo<{ a: number; b: string; }> + +dc = da; // Error +>dc = da : Demo<{ a: number; }> +>dc : Demo<{ a: number; b: string; }> +>da : Demo<{ a: number; }> + +dc = db; // Error +>dc = db : Demo<{ b: string; }> +>dc : Demo<{ a: number; b: string; }> +>db : Demo<{ b: string; }> +