Unescape only string literal type nodes.

Not all string literal types, regardless of source, as in the last
commit.
This commit is contained in:
Nathan Shively-Sanders
2016-05-17 13:42:15 -07:00
parent e25927da57
commit a5585c544f
4 changed files with 13 additions and 6 deletions

View File

@@ -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] = <StringLiteralType>createType(TypeFlags.StringLiteral);
type.text = unescaped;
const type = stringLiteralTypes[text] = <StringLiteralType>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;
}

View File

@@ -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';

View File

@@ -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';

View File

@@ -1,2 +1,4 @@
var shouldBeOk: '__dunder' = '__dunder';
var bad: '__dunder' = 'no_dunder';
var okok: '___thunder' = '___thunder';
var alsoOk: '_sunder' = '_sunder';