diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 6a720d947df..587235d5b8e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -5138,12 +5138,13 @@ namespace ts { } function getStringLiteralTypeForText(text: string): StringLiteralType { - if (hasProperty(stringLiteralTypes, text)) { - return stringLiteralTypes[text]; + const unescaped = unescapeIdentifier(text); + if (hasProperty(stringLiteralTypes, unescaped)) { + return stringLiteralTypes[unescaped]; } - const type = stringLiteralTypes[text] = createType(TypeFlags.StringLiteral); - type.text = text; + const type = stringLiteralTypes[unescaped] = createType(TypeFlags.StringLiteral); + type.text = unescaped; return type; } diff --git a/tests/baselines/reference/doubleUnderStringLiteralAssignability.errors.txt b/tests/baselines/reference/doubleUnderStringLiteralAssignability.errors.txt new file mode 100644 index 00000000000..782f022faeb --- /dev/null +++ b/tests/baselines/reference/doubleUnderStringLiteralAssignability.errors.txt @@ -0,0 +1,9 @@ +tests/cases/compiler/doubleUnderStringLiteralAssignability.ts(2,5): error TS2322: Type '"no_dunder"' is not assignable to type '"__dunder"'. + + +==== tests/cases/compiler/doubleUnderStringLiteralAssignability.ts (1 errors) ==== + var shouldBeOk: '__dunder' = '__dunder'; + var bad: '__dunder' = 'no_dunder'; + ~~~ +!!! error TS2322: Type '"no_dunder"' is not assignable to type '"__dunder"'. + \ No newline at end of file diff --git a/tests/baselines/reference/doubleUnderStringLiteralAssignability.js b/tests/baselines/reference/doubleUnderStringLiteralAssignability.js new file mode 100644 index 00000000000..7911c3766e1 --- /dev/null +++ b/tests/baselines/reference/doubleUnderStringLiteralAssignability.js @@ -0,0 +1,8 @@ +//// [doubleUnderStringLiteralAssignability.ts] +var shouldBeOk: '__dunder' = '__dunder'; +var bad: '__dunder' = 'no_dunder'; + + +//// [doubleUnderStringLiteralAssignability.js] +var shouldBeOk = '__dunder'; +var bad = 'no_dunder'; diff --git a/tests/cases/compiler/doubleUnderStringLiteralAssignability.ts b/tests/cases/compiler/doubleUnderStringLiteralAssignability.ts new file mode 100644 index 00000000000..81149acc992 --- /dev/null +++ b/tests/cases/compiler/doubleUnderStringLiteralAssignability.ts @@ -0,0 +1,2 @@ +var shouldBeOk: '__dunder' = '__dunder'; +var bad: '__dunder' = 'no_dunder';