mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-04 12:32:08 -06:00
Fixed a crash in getPropertyNameForPropertyNameNode on NoSubstitutionTemplateLiteral (#55930)
This commit is contained in:
parent
13a2150e8e
commit
d9cd2d0bd0
@ -17727,7 +17727,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
return false;
|
||||
}
|
||||
|
||||
function getPropertyNameFromIndex(indexType: Type, accessNode: StringLiteral | Identifier | PrivateIdentifier | ObjectBindingPattern | ArrayBindingPattern | ComputedPropertyName | NumericLiteral | IndexedAccessTypeNode | ElementAccessExpression | SyntheticExpression | undefined) {
|
||||
function getPropertyNameFromIndex(indexType: Type, accessNode: PropertyName | ObjectBindingPattern | ArrayBindingPattern | IndexedAccessTypeNode | ElementAccessExpression | SyntheticExpression | undefined) {
|
||||
return isTypeUsableAsPropertyName(indexType) ?
|
||||
getPropertyNameFromType(indexType) :
|
||||
accessNode && isPropertyName(accessNode) ?
|
||||
|
||||
@ -1692,7 +1692,7 @@ export interface QualifiedName extends Node, FlowContainer {
|
||||
|
||||
export type EntityName = Identifier | QualifiedName;
|
||||
|
||||
export type PropertyName = Identifier | StringLiteral | NumericLiteral | ComputedPropertyName | PrivateIdentifier;
|
||||
export type PropertyName = Identifier | StringLiteral | NoSubstitutionTemplateLiteral | NumericLiteral | ComputedPropertyName | PrivateIdentifier;
|
||||
|
||||
export type MemberName = Identifier | PrivateIdentifier;
|
||||
|
||||
|
||||
@ -5062,6 +5062,7 @@ export function getPropertyNameForPropertyNameNode(name: PropertyName | JsxAttri
|
||||
case SyntaxKind.PrivateIdentifier:
|
||||
return name.escapedText;
|
||||
case SyntaxKind.StringLiteral:
|
||||
case SyntaxKind.NoSubstitutionTemplateLiteral:
|
||||
case SyntaxKind.NumericLiteral:
|
||||
return escapeLeadingUnderscores(name.text);
|
||||
case SyntaxKind.ComputedPropertyName:
|
||||
|
||||
@ -4976,7 +4976,7 @@ declare namespace ts {
|
||||
readonly right: Identifier;
|
||||
}
|
||||
type EntityName = Identifier | QualifiedName;
|
||||
type PropertyName = Identifier | StringLiteral | NumericLiteral | ComputedPropertyName | PrivateIdentifier;
|
||||
type PropertyName = Identifier | StringLiteral | NoSubstitutionTemplateLiteral | NumericLiteral | ComputedPropertyName | PrivateIdentifier;
|
||||
type MemberName = Identifier | PrivateIdentifier;
|
||||
type DeclarationName = PropertyName | JsxAttributeName | StringLiteralLike | ElementAccessExpression | BindingPattern | EntityNameExpression;
|
||||
interface Declaration extends Node {
|
||||
|
||||
@ -0,0 +1,14 @@
|
||||
//// [tests/cases/compiler/indexTypeNoSubstitutionTemplateLiteral.ts] ////
|
||||
|
||||
//// [indexTypeNoSubstitutionTemplateLiteral.ts]
|
||||
function Foo() {}
|
||||
Foo[`b`] = function () {};
|
||||
|
||||
type Test = keyof typeof Foo;
|
||||
|
||||
|
||||
|
||||
//// [indexTypeNoSubstitutionTemplateLiteral.js]
|
||||
"use strict";
|
||||
function Foo() { }
|
||||
Foo["b"] = function () { };
|
||||
@ -0,0 +1,15 @@
|
||||
//// [tests/cases/compiler/indexTypeNoSubstitutionTemplateLiteral.ts] ////
|
||||
|
||||
=== indexTypeNoSubstitutionTemplateLiteral.ts ===
|
||||
function Foo() {}
|
||||
>Foo : Symbol(Foo, Decl(indexTypeNoSubstitutionTemplateLiteral.ts, 0, 0), Decl(indexTypeNoSubstitutionTemplateLiteral.ts, 0, 17))
|
||||
|
||||
Foo[`b`] = function () {};
|
||||
>Foo : Symbol(Foo, Decl(indexTypeNoSubstitutionTemplateLiteral.ts, 0, 0), Decl(indexTypeNoSubstitutionTemplateLiteral.ts, 0, 17))
|
||||
>`b` : Symbol(Foo[`b`], Decl(indexTypeNoSubstitutionTemplateLiteral.ts, 0, 17))
|
||||
|
||||
type Test = keyof typeof Foo;
|
||||
>Test : Symbol(Test, Decl(indexTypeNoSubstitutionTemplateLiteral.ts, 1, 26))
|
||||
>Foo : Symbol(Foo, Decl(indexTypeNoSubstitutionTemplateLiteral.ts, 0, 0), Decl(indexTypeNoSubstitutionTemplateLiteral.ts, 0, 17))
|
||||
|
||||
|
||||
@ -0,0 +1,18 @@
|
||||
//// [tests/cases/compiler/indexTypeNoSubstitutionTemplateLiteral.ts] ////
|
||||
|
||||
=== indexTypeNoSubstitutionTemplateLiteral.ts ===
|
||||
function Foo() {}
|
||||
>Foo : typeof Foo
|
||||
|
||||
Foo[`b`] = function () {};
|
||||
>Foo[`b`] = function () {} : () => void
|
||||
>Foo[`b`] : () => void
|
||||
>Foo : typeof Foo
|
||||
>`b` : "b"
|
||||
>function () {} : () => void
|
||||
|
||||
type Test = keyof typeof Foo;
|
||||
>Test : "b"
|
||||
>Foo : typeof Foo
|
||||
|
||||
|
||||
@ -0,0 +1,7 @@
|
||||
// @strict: true
|
||||
|
||||
function Foo() {}
|
||||
Foo[`b`] = function () {};
|
||||
|
||||
type Test = keyof typeof Foo;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user