diff --git a/src/compiler/factory.ts b/src/compiler/factory.ts index 0369be30076e0..7252a9f0c1d8d 100644 --- a/src/compiler/factory.ts +++ b/src/compiler/factory.ts @@ -773,13 +773,13 @@ namespace ts { : node; } - export function createLiteralTypeNode(literal: Expression) { + export function createLiteralTypeNode(literal: LiteralTypeNode["literal"]) { const node = createSynthesizedNode(SyntaxKind.LiteralType) as LiteralTypeNode; node.literal = literal; return node; } - export function updateLiteralTypeNode(node: LiteralTypeNode, literal: Expression) { + export function updateLiteralTypeNode(node: LiteralTypeNode, literal: LiteralTypeNode["literal"]) { return node.literal !== literal ? updateNode(createLiteralTypeNode(literal), node) : node; diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 63f1696832b8e..275e83cfac29c 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2621,16 +2621,9 @@ namespace ts { unaryMinusExpression.operator = SyntaxKind.MinusToken; nextToken(); } - let expression: UnaryExpression; - switch (token()) { - case SyntaxKind.StringLiteral: - case SyntaxKind.NumericLiteral: - expression = parseLiteralLikeNode(token()) as LiteralExpression; - break; - case SyntaxKind.TrueKeyword: - case SyntaxKind.FalseKeyword: - expression = parseTokenNode(); - } + let expression: BooleanLiteral | LiteralExpression | PrefixUnaryExpression = token() === SyntaxKind.TrueKeyword || token() === SyntaxKind.FalseKeyword + ? parseTokenNode() + : parseLiteralLikeNode(token()) as LiteralExpression; if (negative) { unaryMinusExpression.operand = expression; finishNode(unaryMinusExpression); @@ -2666,6 +2659,7 @@ namespace ts { return parseJSDocNodeWithType(SyntaxKind.JSDocVariadicType); case SyntaxKind.ExclamationToken: return parseJSDocNodeWithType(SyntaxKind.JSDocNonNullableType); + case SyntaxKind.NoSubstitutionTemplateLiteral: case SyntaxKind.StringLiteral: case SyntaxKind.NumericLiteral: case SyntaxKind.TrueKeyword: diff --git a/src/compiler/types.ts b/src/compiler/types.ts index cfb08a7b05abd..5bba6a2349e3c 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -1049,7 +1049,7 @@ namespace ts { export interface LiteralTypeNode extends TypeNode { kind: SyntaxKind.LiteralType; - literal: Expression; + literal: BooleanLiteral | LiteralExpression | PrefixUnaryExpression; } export interface StringLiteral extends LiteralExpression { diff --git a/tests/baselines/reference/noSubstitutionTemplateStringLiteralTypes.js b/tests/baselines/reference/noSubstitutionTemplateStringLiteralTypes.js new file mode 100644 index 0000000000000..0c702a113b1db --- /dev/null +++ b/tests/baselines/reference/noSubstitutionTemplateStringLiteralTypes.js @@ -0,0 +1,6 @@ +//// [noSubstitutionTemplateStringLiteralTypes.ts] +const x: `foo` = "foo"; + + +//// [noSubstitutionTemplateStringLiteralTypes.js] +var x = "foo"; diff --git a/tests/baselines/reference/noSubstitutionTemplateStringLiteralTypes.symbols b/tests/baselines/reference/noSubstitutionTemplateStringLiteralTypes.symbols new file mode 100644 index 0000000000000..c5ee402566386 --- /dev/null +++ b/tests/baselines/reference/noSubstitutionTemplateStringLiteralTypes.symbols @@ -0,0 +1,4 @@ +=== tests/cases/compiler/noSubstitutionTemplateStringLiteralTypes.ts === +const x: `foo` = "foo"; +>x : Symbol(x, Decl(noSubstitutionTemplateStringLiteralTypes.ts, 0, 5)) + diff --git a/tests/baselines/reference/noSubstitutionTemplateStringLiteralTypes.types b/tests/baselines/reference/noSubstitutionTemplateStringLiteralTypes.types new file mode 100644 index 0000000000000..2274e703ddcc1 --- /dev/null +++ b/tests/baselines/reference/noSubstitutionTemplateStringLiteralTypes.types @@ -0,0 +1,6 @@ +=== tests/cases/compiler/noSubstitutionTemplateStringLiteralTypes.ts === +const x: `foo` = "foo"; +>x : "foo" +>`foo` : "foo" +>"foo" : "foo" + diff --git a/tests/cases/compiler/noSubstitutionTemplateStringLiteralTypes.ts b/tests/cases/compiler/noSubstitutionTemplateStringLiteralTypes.ts new file mode 100644 index 0000000000000..994262c5b10e5 --- /dev/null +++ b/tests/cases/compiler/noSubstitutionTemplateStringLiteralTypes.ts @@ -0,0 +1 @@ +const x: `foo` = "foo";