mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-15 03:23:08 -06:00
Avoid circularly resolving names when looking up type members using resolveName (#26924)
* Avoid circularly resolving names when looking up type members using resolveName * Add comment
This commit is contained in:
parent
614423b287
commit
d3463ce356
@ -1312,7 +1312,10 @@ namespace ts {
|
||||
case SyntaxKind.ClassDeclaration:
|
||||
case SyntaxKind.ClassExpression:
|
||||
case SyntaxKind.InterfaceDeclaration:
|
||||
if (result = lookup(getMembersOfSymbol(getSymbolOfNode(location as ClassLikeDeclaration | InterfaceDeclaration)), name, meaning & SymbolFlags.Type)) {
|
||||
// The below is used to lookup type parameters within a class or interface, as they are added to the class/interface locals
|
||||
// These can never be latebound, so the symbol's raw members are sufficient. `getMembersOfNode` cannot be used, as it would
|
||||
// trigger resolving late-bound names, which we may already be in the process of doing while we're here!
|
||||
if (result = lookup(getSymbolOfNode(location as ClassLikeDeclaration | InterfaceDeclaration).members || emptySymbols, name, meaning & SymbolFlags.Type)) {
|
||||
if (!isTypeParameterSymbolDeclaredInContainer(result, location)) {
|
||||
// ignore type parameters not declared in this container
|
||||
result = undefined;
|
||||
|
||||
@ -0,0 +1,14 @@
|
||||
=== tests/cases/compiler/index.d.ts ===
|
||||
export class C extends Object {
|
||||
>C : Symbol(C, Decl(index.d.ts, 0, 0))
|
||||
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
|
||||
|
||||
static readonly p: unique symbol;
|
||||
>p : Symbol(C.p, Decl(index.d.ts, 0, 31))
|
||||
|
||||
[C.p](): void;
|
||||
>[C.p] : Symbol(C[C.p], Decl(index.d.ts, 1, 37))
|
||||
>C.p : Symbol(C.p, Decl(index.d.ts, 0, 31))
|
||||
>C : Symbol(C, Decl(index.d.ts, 0, 0))
|
||||
>p : Symbol(C.p, Decl(index.d.ts, 0, 31))
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
=== tests/cases/compiler/index.d.ts ===
|
||||
export class C extends Object {
|
||||
>C : C
|
||||
>Object : Object
|
||||
|
||||
static readonly p: unique symbol;
|
||||
>p : unique symbol
|
||||
|
||||
[C.p](): void;
|
||||
>[C.p] : () => void
|
||||
>C.p : unique symbol
|
||||
>C : typeof C
|
||||
>p : unique symbol
|
||||
}
|
||||
@ -0,0 +1,5 @@
|
||||
// @filename: index.d.ts
|
||||
export class C extends Object {
|
||||
static readonly p: unique symbol;
|
||||
[C.p](): void;
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user