From 364495996f57d7d84c64c8f7cbbb1e5b7890b8fa Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 8 Sep 2022 12:31:06 -0700 Subject: [PATCH] Add test case --- .../baselines/reference/issue50680.errors.txt | 36 ++++++++ tests/baselines/reference/issue50680.js | 41 +++++++++ tests/baselines/reference/issue50680.symbols | 73 +++++++++++++++ tests/baselines/reference/issue50680.types | 89 +++++++++++++++++++ tests/cases/compiler/issue50680.ts | 21 +++++ 5 files changed, 260 insertions(+) create mode 100644 tests/baselines/reference/issue50680.errors.txt create mode 100644 tests/baselines/reference/issue50680.js create mode 100644 tests/baselines/reference/issue50680.symbols create mode 100644 tests/baselines/reference/issue50680.types create mode 100644 tests/cases/compiler/issue50680.ts diff --git a/tests/baselines/reference/issue50680.errors.txt b/tests/baselines/reference/issue50680.errors.txt new file mode 100644 index 00000000000..241abea1b35 --- /dev/null +++ b/tests/baselines/reference/issue50680.errors.txt @@ -0,0 +1,36 @@ +tests/cases/compiler/issue50680.ts(5,11): error TS2322: Type 'string' is not assignable to type '"aa" | "bb"'. +tests/cases/compiler/issue50680.ts(13,11): error TS2322: Type 'string' is not assignable to type '"aa" | "bb"'. +tests/cases/compiler/issue50680.ts(14,11): error TS2322: Type 'string[]' is not assignable to type '("aa" | "bb")[]'. + Type 'string' is not assignable to type '"aa" | "bb"'. + + +==== tests/cases/compiler/issue50680.ts (3 errors) ==== + declare function func(arg: { keys: T[] }): { readonly keys: T[]; readonly firstKey: T; }; + + function func1() { + const { firstKey } = func({keys: ["aa", "bb"]}) + const a: "aa" | "bb" = firstKey; + ~ +!!! error TS2322: Type 'string' is not assignable to type '"aa" | "bb"'. + + const { keys } = func({keys: ["aa", "bb"]}) + const b: ("aa" | "bb")[] = keys; + } + + function func2() { + const { keys, firstKey } = func({keys: ["aa", "bb"]}) + const a: "aa" | "bb" = firstKey; + ~ +!!! error TS2322: Type 'string' is not assignable to type '"aa" | "bb"'. + const b: ("aa" | "bb")[] = keys; + ~ +!!! error TS2322: Type 'string[]' is not assignable to type '("aa" | "bb")[]'. +!!! error TS2322: Type 'string' is not assignable to type '"aa" | "bb"'. + } + + function func3() { + const x = func({keys: ["aa", "bb"]}) + const a: "aa" | "bb" = x.firstKey; + const b: ("aa" | "bb")[] = x.keys; + } + \ No newline at end of file diff --git a/tests/baselines/reference/issue50680.js b/tests/baselines/reference/issue50680.js new file mode 100644 index 00000000000..6b2a360d12e --- /dev/null +++ b/tests/baselines/reference/issue50680.js @@ -0,0 +1,41 @@ +//// [issue50680.ts] +declare function func(arg: { keys: T[] }): { readonly keys: T[]; readonly firstKey: T; }; + +function func1() { + const { firstKey } = func({keys: ["aa", "bb"]}) + const a: "aa" | "bb" = firstKey; + + const { keys } = func({keys: ["aa", "bb"]}) + const b: ("aa" | "bb")[] = keys; +} + +function func2() { + const { keys, firstKey } = func({keys: ["aa", "bb"]}) + const a: "aa" | "bb" = firstKey; + const b: ("aa" | "bb")[] = keys; +} + +function func3() { + const x = func({keys: ["aa", "bb"]}) + const a: "aa" | "bb" = x.firstKey; + const b: ("aa" | "bb")[] = x.keys; +} + + +//// [issue50680.js] +function func1() { + var firstKey = func({ keys: ["aa", "bb"] }).firstKey; + var a = firstKey; + var keys = func({ keys: ["aa", "bb"] }).keys; + var b = keys; +} +function func2() { + var _a = func({ keys: ["aa", "bb"] }), keys = _a.keys, firstKey = _a.firstKey; + var a = firstKey; + var b = keys; +} +function func3() { + var x = func({ keys: ["aa", "bb"] }); + var a = x.firstKey; + var b = x.keys; +} diff --git a/tests/baselines/reference/issue50680.symbols b/tests/baselines/reference/issue50680.symbols new file mode 100644 index 00000000000..305245e7cd8 --- /dev/null +++ b/tests/baselines/reference/issue50680.symbols @@ -0,0 +1,73 @@ +=== tests/cases/compiler/issue50680.ts === +declare function func(arg: { keys: T[] }): { readonly keys: T[]; readonly firstKey: T; }; +>func : Symbol(func, Decl(issue50680.ts, 0, 0)) +>T : Symbol(T, Decl(issue50680.ts, 0, 22)) +>arg : Symbol(arg, Decl(issue50680.ts, 0, 40)) +>keys : Symbol(keys, Decl(issue50680.ts, 0, 46)) +>T : Symbol(T, Decl(issue50680.ts, 0, 22)) +>keys : Symbol(keys, Decl(issue50680.ts, 0, 62)) +>T : Symbol(T, Decl(issue50680.ts, 0, 22)) +>firstKey : Symbol(firstKey, Decl(issue50680.ts, 0, 82)) +>T : Symbol(T, Decl(issue50680.ts, 0, 22)) + +function func1() { +>func1 : Symbol(func1, Decl(issue50680.ts, 0, 107)) + + const { firstKey } = func({keys: ["aa", "bb"]}) +>firstKey : Symbol(firstKey, Decl(issue50680.ts, 3, 11)) +>func : Symbol(func, Decl(issue50680.ts, 0, 0)) +>keys : Symbol(keys, Decl(issue50680.ts, 3, 31)) + + const a: "aa" | "bb" = firstKey; +>a : Symbol(a, Decl(issue50680.ts, 4, 9)) +>firstKey : Symbol(firstKey, Decl(issue50680.ts, 3, 11)) + + const { keys } = func({keys: ["aa", "bb"]}) +>keys : Symbol(keys, Decl(issue50680.ts, 6, 11)) +>func : Symbol(func, Decl(issue50680.ts, 0, 0)) +>keys : Symbol(keys, Decl(issue50680.ts, 6, 27)) + + const b: ("aa" | "bb")[] = keys; +>b : Symbol(b, Decl(issue50680.ts, 7, 9)) +>keys : Symbol(keys, Decl(issue50680.ts, 6, 11)) +} + +function func2() { +>func2 : Symbol(func2, Decl(issue50680.ts, 8, 1)) + + const { keys, firstKey } = func({keys: ["aa", "bb"]}) +>keys : Symbol(keys, Decl(issue50680.ts, 11, 11)) +>firstKey : Symbol(firstKey, Decl(issue50680.ts, 11, 17)) +>func : Symbol(func, Decl(issue50680.ts, 0, 0)) +>keys : Symbol(keys, Decl(issue50680.ts, 11, 37)) + + const a: "aa" | "bb" = firstKey; +>a : Symbol(a, Decl(issue50680.ts, 12, 9)) +>firstKey : Symbol(firstKey, Decl(issue50680.ts, 11, 17)) + + const b: ("aa" | "bb")[] = keys; +>b : Symbol(b, Decl(issue50680.ts, 13, 9)) +>keys : Symbol(keys, Decl(issue50680.ts, 11, 11)) +} + +function func3() { +>func3 : Symbol(func3, Decl(issue50680.ts, 14, 1)) + + const x = func({keys: ["aa", "bb"]}) +>x : Symbol(x, Decl(issue50680.ts, 17, 9)) +>func : Symbol(func, Decl(issue50680.ts, 0, 0)) +>keys : Symbol(keys, Decl(issue50680.ts, 17, 20)) + + const a: "aa" | "bb" = x.firstKey; +>a : Symbol(a, Decl(issue50680.ts, 18, 9)) +>x.firstKey : Symbol(firstKey, Decl(issue50680.ts, 0, 82)) +>x : Symbol(x, Decl(issue50680.ts, 17, 9)) +>firstKey : Symbol(firstKey, Decl(issue50680.ts, 0, 82)) + + const b: ("aa" | "bb")[] = x.keys; +>b : Symbol(b, Decl(issue50680.ts, 19, 9)) +>x.keys : Symbol(keys, Decl(issue50680.ts, 0, 62)) +>x : Symbol(x, Decl(issue50680.ts, 17, 9)) +>keys : Symbol(keys, Decl(issue50680.ts, 0, 62)) +} + diff --git a/tests/baselines/reference/issue50680.types b/tests/baselines/reference/issue50680.types new file mode 100644 index 00000000000..1ad1f004f58 --- /dev/null +++ b/tests/baselines/reference/issue50680.types @@ -0,0 +1,89 @@ +=== tests/cases/compiler/issue50680.ts === +declare function func(arg: { keys: T[] }): { readonly keys: T[]; readonly firstKey: T; }; +>func : (arg: { keys: T[];}) => { readonly keys: T[]; readonly firstKey: T;} +>arg : { keys: T[]; } +>keys : T[] +>keys : T[] +>firstKey : T + +function func1() { +>func1 : () => void + + const { firstKey } = func({keys: ["aa", "bb"]}) +>firstKey : string +>func({keys: ["aa", "bb"]}) : { readonly keys: string[]; readonly firstKey: string; } +>func : (arg: { keys: T[]; }) => { readonly keys: T[]; readonly firstKey: T; } +>{keys: ["aa", "bb"]} : { keys: string[]; } +>keys : string[] +>["aa", "bb"] : string[] +>"aa" : "aa" +>"bb" : "bb" + + const a: "aa" | "bb" = firstKey; +>a : "aa" | "bb" +>firstKey : string + + const { keys } = func({keys: ["aa", "bb"]}) +>keys : ("aa" | "bb")[] +>func({keys: ["aa", "bb"]}) : { readonly keys: ("aa" | "bb")[]; readonly firstKey: "aa" | "bb"; } +>func : (arg: { keys: T[]; }) => { readonly keys: T[]; readonly firstKey: T; } +>{keys: ["aa", "bb"]} : { keys: ("aa" | "bb")[]; } +>keys : ("aa" | "bb")[] +>["aa", "bb"] : ("aa" | "bb")[] +>"aa" : "aa" +>"bb" : "bb" + + const b: ("aa" | "bb")[] = keys; +>b : ("aa" | "bb")[] +>keys : ("aa" | "bb")[] +} + +function func2() { +>func2 : () => void + + const { keys, firstKey } = func({keys: ["aa", "bb"]}) +>keys : string[] +>firstKey : string +>func({keys: ["aa", "bb"]}) : { readonly keys: string[]; readonly firstKey: string; } +>func : (arg: { keys: T[]; }) => { readonly keys: T[]; readonly firstKey: T; } +>{keys: ["aa", "bb"]} : { keys: string[]; } +>keys : string[] +>["aa", "bb"] : string[] +>"aa" : "aa" +>"bb" : "bb" + + const a: "aa" | "bb" = firstKey; +>a : "aa" | "bb" +>firstKey : string + + const b: ("aa" | "bb")[] = keys; +>b : ("aa" | "bb")[] +>keys : string[] +} + +function func3() { +>func3 : () => void + + const x = func({keys: ["aa", "bb"]}) +>x : { readonly keys: ("aa" | "bb")[]; readonly firstKey: "aa" | "bb"; } +>func({keys: ["aa", "bb"]}) : { readonly keys: ("aa" | "bb")[]; readonly firstKey: "aa" | "bb"; } +>func : (arg: { keys: T[]; }) => { readonly keys: T[]; readonly firstKey: T; } +>{keys: ["aa", "bb"]} : { keys: ("aa" | "bb")[]; } +>keys : ("aa" | "bb")[] +>["aa", "bb"] : ("aa" | "bb")[] +>"aa" : "aa" +>"bb" : "bb" + + const a: "aa" | "bb" = x.firstKey; +>a : "aa" | "bb" +>x.firstKey : "aa" | "bb" +>x : { readonly keys: ("aa" | "bb")[]; readonly firstKey: "aa" | "bb"; } +>firstKey : "aa" | "bb" + + const b: ("aa" | "bb")[] = x.keys; +>b : ("aa" | "bb")[] +>x.keys : ("aa" | "bb")[] +>x : { readonly keys: ("aa" | "bb")[]; readonly firstKey: "aa" | "bb"; } +>keys : ("aa" | "bb")[] +} + diff --git a/tests/cases/compiler/issue50680.ts b/tests/cases/compiler/issue50680.ts new file mode 100644 index 00000000000..0b8727ea5a0 --- /dev/null +++ b/tests/cases/compiler/issue50680.ts @@ -0,0 +1,21 @@ +declare function func(arg: { keys: T[] }): { readonly keys: T[]; readonly firstKey: T; }; + +function func1() { + const { firstKey } = func({keys: ["aa", "bb"]}) + const a: "aa" | "bb" = firstKey; + + const { keys } = func({keys: ["aa", "bb"]}) + const b: ("aa" | "bb")[] = keys; +} + +function func2() { + const { keys, firstKey } = func({keys: ["aa", "bb"]}) + const a: "aa" | "bb" = firstKey; + const b: ("aa" | "bb")[] = keys; +} + +function func3() { + const x = func({keys: ["aa", "bb"]}) + const a: "aa" | "bb" = x.firstKey; + const b: ("aa" | "bb")[] = x.keys; +}