diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index e7ff00df55..f98031cf44 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -11150,6 +11150,10 @@ namespace ts { } const result = createSymbol(SymbolFlags.Property | SymbolFlags.Optional, name); result.type = undefinedType; + const associatedKeyType = getLiteralType(unescapeLeadingUnderscores(name)); + if (associatedKeyType.flags & TypeFlags.StringLiteral) { + result.syntheticLiteralTypeOrigin = associatedKeyType as StringLiteralType; + } undefinedProperties.set(name, result); return result; } diff --git a/tests/baselines/reference/inferredNonidentifierTypesGetQuotes.js b/tests/baselines/reference/inferredNonidentifierTypesGetQuotes.js new file mode 100644 index 0000000000..e9ce8e56d1 --- /dev/null +++ b/tests/baselines/reference/inferredNonidentifierTypesGetQuotes.js @@ -0,0 +1,22 @@ +//// [inferredNonidentifierTypesGetQuotes.ts] +var x = [{ "a-b": "string" }, {}]; + +var y = [{ ["a-b"]: "string" }, {}]; + +//// [inferredNonidentifierTypesGetQuotes.js] +var x = [{ "a-b": "string" }, {}]; +var y = [(_a = {}, _a["a-b"] = "string", _a), {}]; +var _a; + + +//// [inferredNonidentifierTypesGetQuotes.d.ts] +declare var x: ({ + "a-b": string; +} | { + "a-b"?: undefined; +})[]; +declare var y: ({ + ["a-b"]: string; +} | { + "a-b"?: undefined; +})[]; diff --git a/tests/baselines/reference/inferredNonidentifierTypesGetQuotes.symbols b/tests/baselines/reference/inferredNonidentifierTypesGetQuotes.symbols new file mode 100644 index 0000000000..f37063dcee --- /dev/null +++ b/tests/baselines/reference/inferredNonidentifierTypesGetQuotes.symbols @@ -0,0 +1,10 @@ +=== tests/cases/compiler/inferredNonidentifierTypesGetQuotes.ts === +var x = [{ "a-b": "string" }, {}]; +>x : Symbol(x, Decl(inferredNonidentifierTypesGetQuotes.ts, 0, 3)) +>"a-b" : Symbol("a-b", Decl(inferredNonidentifierTypesGetQuotes.ts, 0, 10)) + +var y = [{ ["a-b"]: "string" }, {}]; +>y : Symbol(y, Decl(inferredNonidentifierTypesGetQuotes.ts, 2, 3)) +>["a-b"] : Symbol(["a-b"], Decl(inferredNonidentifierTypesGetQuotes.ts, 2, 10)) +>"a-b" : Symbol(["a-b"], Decl(inferredNonidentifierTypesGetQuotes.ts, 2, 10)) + diff --git a/tests/baselines/reference/inferredNonidentifierTypesGetQuotes.types b/tests/baselines/reference/inferredNonidentifierTypesGetQuotes.types new file mode 100644 index 0000000000..361b550952 --- /dev/null +++ b/tests/baselines/reference/inferredNonidentifierTypesGetQuotes.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/inferredNonidentifierTypesGetQuotes.ts === +var x = [{ "a-b": "string" }, {}]; +>x : ({ "a-b": string; } | { "a-b"?: undefined; })[] +>[{ "a-b": "string" }, {}] : ({ "a-b": string; } | {})[] +>{ "a-b": "string" } : { "a-b": string; } +>"a-b" : string +>"string" : "string" +>{} : {} + +var y = [{ ["a-b"]: "string" }, {}]; +>y : ({ ["a-b"]: string; } | { "a-b"?: undefined; })[] +>[{ ["a-b"]: "string" }, {}] : ({ ["a-b"]: string; } | {})[] +>{ ["a-b"]: "string" } : { ["a-b"]: string; } +>["a-b"] : string +>"a-b" : "a-b" +>"string" : "string" +>{} : {} + diff --git a/tests/cases/compiler/inferredNonidentifierTypesGetQuotes.ts b/tests/cases/compiler/inferredNonidentifierTypesGetQuotes.ts new file mode 100644 index 0000000000..70e3296bef --- /dev/null +++ b/tests/cases/compiler/inferredNonidentifierTypesGetQuotes.ts @@ -0,0 +1,4 @@ +// @declaration: true +var x = [{ "a-b": "string" }, {}]; + +var y = [{ ["a-b"]: "string" }, {}]; \ No newline at end of file