diff --git a/tests/baselines/reference/mappedTypeRelationships.errors.txt b/tests/baselines/reference/mappedTypeRelationships.errors.txt index 1abc27cd24537..1960beb26fb2c 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: { + resolution: 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..c1a5bd44030ce 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: { + resolution: 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: { + resolution: 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..cd1f3b9c65685 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)) + + resolution: string; +>resolution : Symbol(resolution, 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..5fb7e0e2794d3 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 : { resolution: string; } + + resolution: string; +>resolution : string + + }; +} +interface Settings { + config: Params; +>config : Params +} +type ConcreteSettingsResult1 = Settings; +>ConcreteSettingsResult1 : Settings<{ volume: string; }> + +type ConcreteSettingsResult2 = Settings; +>ConcreteSettingsResult2 : Settings<{ volume: string; } | { resolution: string; }> + +type GenericSettingsAccess = Settings; +>GenericSettingsAccess : GenericSettingsAccess + +type GenericSettingsResult1 = GenericSettingsAccess<"audio">; +>GenericSettingsResult1 : Settings<{ volume: 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 9bec21145b28e..c9d4a5dde4d6d 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: { + resolution: 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