diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 587235d5b8e..00dfed5f9c1 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -5138,20 +5138,19 @@ namespace ts { } function getStringLiteralTypeForText(text: string): StringLiteralType { - const unescaped = unescapeIdentifier(text); - if (hasProperty(stringLiteralTypes, unescaped)) { - return stringLiteralTypes[unescaped]; + if (hasProperty(stringLiteralTypes, text)) { + return stringLiteralTypes[text]; } - const type = stringLiteralTypes[unescaped] = createType(TypeFlags.StringLiteral); - type.text = unescaped; + const type = stringLiteralTypes[text] = createType(TypeFlags.StringLiteral); + type.text = text; return type; } function getTypeFromStringLiteralTypeNode(node: StringLiteralTypeNode): Type { const links = getNodeLinks(node); if (!links.resolvedType) { - links.resolvedType = getStringLiteralTypeForText(node.text); + links.resolvedType = getStringLiteralTypeForText(unescapeIdentifier(node.text)); } return links.resolvedType; } diff --git a/tests/baselines/reference/doubleUnderStringLiteralAssignability.errors.txt b/tests/baselines/reference/doubleUnderStringLiteralAssignability.errors.txt index 782f022faeb..c4226a83bfc 100644 --- a/tests/baselines/reference/doubleUnderStringLiteralAssignability.errors.txt +++ b/tests/baselines/reference/doubleUnderStringLiteralAssignability.errors.txt @@ -6,4 +6,6 @@ tests/cases/compiler/doubleUnderStringLiteralAssignability.ts(2,5): error TS2322 var bad: '__dunder' = 'no_dunder'; ~~~ !!! error TS2322: Type '"no_dunder"' is not assignable to type '"__dunder"'. + var okok: '___thunder' = '___thunder'; + var alsoOk: '_sunder' = '_sunder'; \ No newline at end of file diff --git a/tests/baselines/reference/doubleUnderStringLiteralAssignability.js b/tests/baselines/reference/doubleUnderStringLiteralAssignability.js index 7911c3766e1..baf2b521948 100644 --- a/tests/baselines/reference/doubleUnderStringLiteralAssignability.js +++ b/tests/baselines/reference/doubleUnderStringLiteralAssignability.js @@ -1,8 +1,12 @@ //// [doubleUnderStringLiteralAssignability.ts] var shouldBeOk: '__dunder' = '__dunder'; var bad: '__dunder' = 'no_dunder'; +var okok: '___thunder' = '___thunder'; +var alsoOk: '_sunder' = '_sunder'; //// [doubleUnderStringLiteralAssignability.js] var shouldBeOk = '__dunder'; var bad = 'no_dunder'; +var okok = '___thunder'; +var alsoOk = '_sunder'; diff --git a/tests/cases/compiler/doubleUnderStringLiteralAssignability.ts b/tests/cases/compiler/doubleUnderStringLiteralAssignability.ts index 81149acc992..4a1ae75164c 100644 --- a/tests/cases/compiler/doubleUnderStringLiteralAssignability.ts +++ b/tests/cases/compiler/doubleUnderStringLiteralAssignability.ts @@ -1,2 +1,4 @@ var shouldBeOk: '__dunder' = '__dunder'; var bad: '__dunder' = 'no_dunder'; +var okok: '___thunder' = '___thunder'; +var alsoOk: '_sunder' = '_sunder';