From a4cffbedf5aaff91d02f6ab1b4e9a6f32aedab66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Mon, 13 Mar 2023 12:16:19 +0100 Subject: [PATCH 1/2] Add an extra test case for mapped type relationships --- .../mappedTypeRelationships.errors.txt | 19 ++++++- .../reference/mappedTypeRelationships.js | 37 ++++++++++++- .../reference/mappedTypeRelationships.symbols | 55 +++++++++++++++++++ .../reference/mappedTypeRelationships.types | 36 ++++++++++++ .../types/mapped/mappedTypeRelationships.ts | 18 ++++++ 5 files changed, 163 insertions(+), 2 deletions(-) diff --git a/tests/baselines/reference/mappedTypeRelationships.errors.txt b/tests/baselines/reference/mappedTypeRelationships.errors.txt index 1abc27cd24537..25c34d2df26f9 100644 --- a/tests/baselines/reference/mappedTypeRelationships.errors.txt +++ b/tests/baselines/reference/mappedTypeRelationships.errors.txt @@ -372,4 +372,21 @@ tests/cases/conformance/types/mapped/mappedTypeRelationships.ts(168,5): error TS function f(): Partial { return undefined! as T; } - \ No newline at end of file + + // #32365 + interface SettingsTypes { + audio: { + volume: string; + }; + video: { + resulution: string; + }; + } + interface Settings { + config: Params; + } + type ConcreteSettingsResult1 = Settings; + type ConcreteSettingsResult2 = Settings; + type GenericSettingsAccess = Settings; + type GenericSettingsResult1 = GenericSettingsAccess<"audio">; + type GenericSettingsResult2 = GenericSettingsAccess<"audio" | 'video'>; \ No newline at end of file diff --git a/tests/baselines/reference/mappedTypeRelationships.js b/tests/baselines/reference/mappedTypeRelationships.js index 69b94ca81e541..2a3258864a062 100644 --- a/tests/baselines/reference/mappedTypeRelationships.js +++ b/tests/baselines/reference/mappedTypeRelationships.js @@ -190,7 +190,24 @@ function f90() { function f(): Partial { return undefined! as T; } - + +// #32365 +interface SettingsTypes { + audio: { + volume: string; + }; + video: { + resulution: string; + }; +} +interface Settings { + config: Params; +} +type ConcreteSettingsResult1 = Settings; +type ConcreteSettingsResult2 = Settings; +type GenericSettingsAccess = Settings; +type GenericSettingsResult1 = GenericSettingsAccess<"audio">; +type GenericSettingsResult2 = GenericSettingsAccess<"audio" | 'video'>; //// [mappedTypeRelationships.js] function f1(x, k) { @@ -418,3 +435,21 @@ declare function f90(): Partial; +interface SettingsTypes { + audio: { + volume: string; + }; + video: { + resulution: string; + }; +} +interface Settings { + config: Params; +} +type ConcreteSettingsResult1 = Settings; +type ConcreteSettingsResult2 = Settings; +type GenericSettingsAccess = Settings; +type GenericSettingsResult1 = GenericSettingsAccess<"audio">; +type GenericSettingsResult2 = GenericSettingsAccess<"audio" | 'video'>; diff --git a/tests/baselines/reference/mappedTypeRelationships.symbols b/tests/baselines/reference/mappedTypeRelationships.symbols index f50d49cde3a03..7d76e4e8024b1 100644 --- a/tests/baselines/reference/mappedTypeRelationships.symbols +++ b/tests/baselines/reference/mappedTypeRelationships.symbols @@ -836,3 +836,58 @@ function f(): Partial { >T : Symbol(T, Decl(mappedTypeRelationships.ts, 188, 11)) } +// #32365 +interface SettingsTypes { +>SettingsTypes : Symbol(SettingsTypes, Decl(mappedTypeRelationships.ts, 190, 1)) + + audio: { +>audio : Symbol(SettingsTypes.audio, Decl(mappedTypeRelationships.ts, 193, 25)) + + volume: string; +>volume : Symbol(volume, Decl(mappedTypeRelationships.ts, 194, 10)) + + }; + video: { +>video : Symbol(SettingsTypes.video, Decl(mappedTypeRelationships.ts, 196, 4)) + + resulution: string; +>resulution : Symbol(resulution, Decl(mappedTypeRelationships.ts, 197, 10)) + + }; +} +interface Settings { +>Settings : Symbol(Settings, Decl(mappedTypeRelationships.ts, 200, 1)) +>Params : Symbol(Params, Decl(mappedTypeRelationships.ts, 201, 19)) +>K : Symbol(K, Decl(mappedTypeRelationships.ts, 201, 37)) +>Params : Symbol(Params, Decl(mappedTypeRelationships.ts, 201, 19)) + + config: Params; +>config : Symbol(Settings.config, Decl(mappedTypeRelationships.ts, 201, 69)) +>Params : Symbol(Params, Decl(mappedTypeRelationships.ts, 201, 19)) +} +type ConcreteSettingsResult1 = Settings; +>ConcreteSettingsResult1 : Symbol(ConcreteSettingsResult1, Decl(mappedTypeRelationships.ts, 203, 1)) +>Settings : Symbol(Settings, Decl(mappedTypeRelationships.ts, 200, 1)) +>SettingsTypes : Symbol(SettingsTypes, Decl(mappedTypeRelationships.ts, 190, 1)) + +type ConcreteSettingsResult2 = Settings; +>ConcreteSettingsResult2 : Symbol(ConcreteSettingsResult2, Decl(mappedTypeRelationships.ts, 204, 64)) +>Settings : Symbol(Settings, Decl(mappedTypeRelationships.ts, 200, 1)) +>SettingsTypes : Symbol(SettingsTypes, Decl(mappedTypeRelationships.ts, 190, 1)) + +type GenericSettingsAccess = Settings; +>GenericSettingsAccess : Symbol(GenericSettingsAccess, Decl(mappedTypeRelationships.ts, 205, 74)) +>T : Symbol(T, Decl(mappedTypeRelationships.ts, 206, 27)) +>SettingsTypes : Symbol(SettingsTypes, Decl(mappedTypeRelationships.ts, 190, 1)) +>Settings : Symbol(Settings, Decl(mappedTypeRelationships.ts, 200, 1)) +>SettingsTypes : Symbol(SettingsTypes, Decl(mappedTypeRelationships.ts, 190, 1)) +>T : Symbol(T, Decl(mappedTypeRelationships.ts, 206, 27)) + +type GenericSettingsResult1 = GenericSettingsAccess<"audio">; +>GenericSettingsResult1 : Symbol(GenericSettingsResult1, Decl(mappedTypeRelationships.ts, 206, 87)) +>GenericSettingsAccess : Symbol(GenericSettingsAccess, Decl(mappedTypeRelationships.ts, 205, 74)) + +type GenericSettingsResult2 = GenericSettingsAccess<"audio" | 'video'>; +>GenericSettingsResult2 : Symbol(GenericSettingsResult2, Decl(mappedTypeRelationships.ts, 207, 61)) +>GenericSettingsAccess : Symbol(GenericSettingsAccess, Decl(mappedTypeRelationships.ts, 205, 74)) + diff --git a/tests/baselines/reference/mappedTypeRelationships.types b/tests/baselines/reference/mappedTypeRelationships.types index 7d93248e8f021..c161d3dd11ffd 100644 --- a/tests/baselines/reference/mappedTypeRelationships.types +++ b/tests/baselines/reference/mappedTypeRelationships.types @@ -678,3 +678,39 @@ function f(): Partial { >undefined : undefined } +// #32365 +interface SettingsTypes { + audio: { +>audio : { volume: string; } + + volume: string; +>volume : string + + }; + video: { +>video : { resulution: string; } + + resulution: string; +>resulution : string + + }; +} +interface Settings { + config: Params; +>config : Params +} +type ConcreteSettingsResult1 = Settings; +>ConcreteSettingsResult1 : Settings<{ volume: string; }> + +type ConcreteSettingsResult2 = Settings; +>ConcreteSettingsResult2 : Settings<{ volume: string; } | { resulution: string; }> + +type GenericSettingsAccess = Settings; +>GenericSettingsAccess : GenericSettingsAccess + +type GenericSettingsResult1 = GenericSettingsAccess<"audio">; +>GenericSettingsResult1 : Settings<{ volume: string; }> + +type GenericSettingsResult2 = GenericSettingsAccess<"audio" | 'video'>; +>GenericSettingsResult2 : Settings<{ volume: string; } | { resulution: string; }> + diff --git a/tests/cases/conformance/types/mapped/mappedTypeRelationships.ts b/tests/cases/conformance/types/mapped/mappedTypeRelationships.ts index 9bec21145b28e..dd1c6aa7faf48 100644 --- a/tests/cases/conformance/types/mapped/mappedTypeRelationships.ts +++ b/tests/cases/conformance/types/mapped/mappedTypeRelationships.ts @@ -192,3 +192,21 @@ function f90() { function f(): Partial { return undefined! as T; } + +// #32365 +interface SettingsTypes { + audio: { + volume: string; + }; + video: { + resulution: string; + }; +} +interface Settings { + config: Params; +} +type ConcreteSettingsResult1 = Settings; +type ConcreteSettingsResult2 = Settings; +type GenericSettingsAccess = Settings; +type GenericSettingsResult1 = GenericSettingsAccess<"audio">; +type GenericSettingsResult2 = GenericSettingsAccess<"audio" | 'video'>; \ No newline at end of file From 1bd20edb44451887109418874651acc906c14bee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Tue, 14 Mar 2023 10:32:11 +0100 Subject: [PATCH 2/2] Address nits from the review --- .../reference/mappedTypeRelationships.errors.txt | 6 +++--- .../baselines/reference/mappedTypeRelationships.js | 12 ++++++------ .../reference/mappedTypeRelationships.symbols | 8 ++++---- .../reference/mappedTypeRelationships.types | 14 +++++++------- .../types/mapped/mappedTypeRelationships.ts | 6 +++--- 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/tests/baselines/reference/mappedTypeRelationships.errors.txt b/tests/baselines/reference/mappedTypeRelationships.errors.txt index 25c34d2df26f9..1960beb26fb2c 100644 --- a/tests/baselines/reference/mappedTypeRelationships.errors.txt +++ b/tests/baselines/reference/mappedTypeRelationships.errors.txt @@ -379,14 +379,14 @@ tests/cases/conformance/types/mapped/mappedTypeRelationships.ts(168,5): error TS volume: string; }; video: { - resulution: string; + resolution: string; }; } interface Settings { config: Params; } type ConcreteSettingsResult1 = Settings; - type ConcreteSettingsResult2 = Settings; + type ConcreteSettingsResult2 = Settings; type GenericSettingsAccess = Settings; type GenericSettingsResult1 = GenericSettingsAccess<"audio">; - type GenericSettingsResult2 = GenericSettingsAccess<"audio" | 'video'>; \ No newline at end of file + type GenericSettingsResult2 = GenericSettingsAccess<"audio" | "video">; \ No newline at end of file diff --git a/tests/baselines/reference/mappedTypeRelationships.js b/tests/baselines/reference/mappedTypeRelationships.js index 2a3258864a062..c1a5bd44030ce 100644 --- a/tests/baselines/reference/mappedTypeRelationships.js +++ b/tests/baselines/reference/mappedTypeRelationships.js @@ -197,17 +197,17 @@ interface SettingsTypes { volume: string; }; video: { - resulution: string; + resolution: string; }; } interface Settings { config: Params; } type ConcreteSettingsResult1 = Settings; -type ConcreteSettingsResult2 = Settings; +type ConcreteSettingsResult2 = Settings; type GenericSettingsAccess = Settings; type GenericSettingsResult1 = GenericSettingsAccess<"audio">; -type GenericSettingsResult2 = GenericSettingsAccess<"audio" | 'video'>; +type GenericSettingsResult2 = GenericSettingsAccess<"audio" | "video">; //// [mappedTypeRelationships.js] function f1(x, k) { @@ -440,7 +440,7 @@ interface SettingsTypes { volume: string; }; video: { - resulution: string; + resolution: string; }; } interface Settings; -type ConcreteSettingsResult2 = Settings; +type ConcreteSettingsResult2 = Settings; type GenericSettingsAccess = Settings; type GenericSettingsResult1 = GenericSettingsAccess<"audio">; -type GenericSettingsResult2 = GenericSettingsAccess<"audio" | 'video'>; +type GenericSettingsResult2 = GenericSettingsAccess<"audio" | "video">; diff --git a/tests/baselines/reference/mappedTypeRelationships.symbols b/tests/baselines/reference/mappedTypeRelationships.symbols index 7d76e4e8024b1..cd1f3b9c65685 100644 --- a/tests/baselines/reference/mappedTypeRelationships.symbols +++ b/tests/baselines/reference/mappedTypeRelationships.symbols @@ -850,8 +850,8 @@ interface SettingsTypes { video: { >video : Symbol(SettingsTypes.video, Decl(mappedTypeRelationships.ts, 196, 4)) - resulution: string; ->resulution : Symbol(resulution, Decl(mappedTypeRelationships.ts, 197, 10)) + resolution: string; +>resolution : Symbol(resolution, Decl(mappedTypeRelationships.ts, 197, 10)) }; } @@ -870,7 +870,7 @@ type ConcreteSettingsResult1 = Settings; >Settings : Symbol(Settings, Decl(mappedTypeRelationships.ts, 200, 1)) >SettingsTypes : Symbol(SettingsTypes, Decl(mappedTypeRelationships.ts, 190, 1)) -type ConcreteSettingsResult2 = Settings; +type ConcreteSettingsResult2 = Settings; >ConcreteSettingsResult2 : Symbol(ConcreteSettingsResult2, Decl(mappedTypeRelationships.ts, 204, 64)) >Settings : Symbol(Settings, Decl(mappedTypeRelationships.ts, 200, 1)) >SettingsTypes : Symbol(SettingsTypes, Decl(mappedTypeRelationships.ts, 190, 1)) @@ -887,7 +887,7 @@ type GenericSettingsResult1 = GenericSettingsAccess<"audio">; >GenericSettingsResult1 : Symbol(GenericSettingsResult1, Decl(mappedTypeRelationships.ts, 206, 87)) >GenericSettingsAccess : Symbol(GenericSettingsAccess, Decl(mappedTypeRelationships.ts, 205, 74)) -type GenericSettingsResult2 = GenericSettingsAccess<"audio" | 'video'>; +type GenericSettingsResult2 = GenericSettingsAccess<"audio" | "video">; >GenericSettingsResult2 : Symbol(GenericSettingsResult2, Decl(mappedTypeRelationships.ts, 207, 61)) >GenericSettingsAccess : Symbol(GenericSettingsAccess, Decl(mappedTypeRelationships.ts, 205, 74)) diff --git a/tests/baselines/reference/mappedTypeRelationships.types b/tests/baselines/reference/mappedTypeRelationships.types index c161d3dd11ffd..5fb7e0e2794d3 100644 --- a/tests/baselines/reference/mappedTypeRelationships.types +++ b/tests/baselines/reference/mappedTypeRelationships.types @@ -688,10 +688,10 @@ interface SettingsTypes { }; video: { ->video : { resulution: string; } +>video : { resolution: string; } - resulution: string; ->resulution : string + resolution: string; +>resolution : string }; } @@ -702,8 +702,8 @@ interface Settings { type ConcreteSettingsResult1 = Settings; >ConcreteSettingsResult1 : Settings<{ volume: string; }> -type ConcreteSettingsResult2 = Settings; ->ConcreteSettingsResult2 : Settings<{ volume: string; } | { resulution: string; }> +type ConcreteSettingsResult2 = Settings; +>ConcreteSettingsResult2 : Settings<{ volume: string; } | { resolution: string; }> type GenericSettingsAccess = Settings; >GenericSettingsAccess : GenericSettingsAccess @@ -711,6 +711,6 @@ type GenericSettingsAccess = Settings; >GenericSettingsResult1 : Settings<{ volume: string; }> -type GenericSettingsResult2 = GenericSettingsAccess<"audio" | 'video'>; ->GenericSettingsResult2 : Settings<{ volume: string; } | { resulution: string; }> +type GenericSettingsResult2 = GenericSettingsAccess<"audio" | "video">; +>GenericSettingsResult2 : Settings<{ volume: string; } | { resolution: string; }> diff --git a/tests/cases/conformance/types/mapped/mappedTypeRelationships.ts b/tests/cases/conformance/types/mapped/mappedTypeRelationships.ts index dd1c6aa7faf48..c9d4a5dde4d6d 100644 --- a/tests/cases/conformance/types/mapped/mappedTypeRelationships.ts +++ b/tests/cases/conformance/types/mapped/mappedTypeRelationships.ts @@ -199,14 +199,14 @@ interface SettingsTypes { volume: string; }; video: { - resulution: string; + resolution: string; }; } interface Settings { config: Params; } type ConcreteSettingsResult1 = Settings; -type ConcreteSettingsResult2 = Settings; +type ConcreteSettingsResult2 = Settings; type GenericSettingsAccess = Settings; type GenericSettingsResult1 = GenericSettingsAccess<"audio">; -type GenericSettingsResult2 = GenericSettingsAccess<"audio" | 'video'>; \ No newline at end of file +type GenericSettingsResult2 = GenericSettingsAccess<"audio" | "video">; \ No newline at end of file