microsoft / microsoft/TypeScript
"Find All References" shows all interface implementations instead of specific class method references
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.3k
- Ø Merge
- 2 T. 4 Std.
- Gemergte PRs (30 T.)
- 132
Beschreibung
When using VS Code's "Find All References" on a class method that implements an interface method, the results include all instances where the method is defined (e.g., in the interface and other implementing classes). However, I expected it to show only references specific to the selected class implementation.
Steps to Reproduce:
- Create a TypeScript file with the following code:
export declare interface Transform { transform(value: any, ...args: any[]): any; } export class Bar implements Transform { transform() {} } export class Baz implements Transform { transform() {} } - Right-click on the
transformmethod inside theBarclass. - Select "Find All References" from the context menu.
- The results include all occurrences of
transform, including the interface definition and the implementation inBaz.
Expected Behavior:
VS Code should return only the references specific to Bar's implementation of transform.
Actual Behavior:
The search includes all references to transform across the interface and other implementations, making it difficult to isolate usages of Bar.transform.
Impact on "inferFromUsage"
The behavior also affects TypeScript's "inferFromUsage" feature:
export declare interface Transform {
transform(value: any, ...args: any[]): any;
}
export class Bar implements Transform {
transform(value) { } // <-- Inferred: value is a number
}
export class Baz implements Transform {
transform(value) { } // <-- Also inferred as a number, even though Baz is unused
}
new Bar().transform(1);
Since Bar.transform(1) is explicitly called, TypeScript infers value as a number. However, Baz.transform also gets the same inferred type even though it's never used. This suggests that TypeScript applies inference across all implementations of the interface, rather than treating them independently.
[🔗 TypeScript AST Viewer](https://ts-ast-viewer.com/#code/KYDwDg9gTgLgBAE2AYwDYEMrDgSwHYzBQBm6y2AKlOngM7HQC2cA3gFBydwzV0NSMAFADd0qAK7AAXHBoBPADRwAdKswBzWjPkBtALoBKbXjkBuNgF82bUJFhw06WrTgAhTLkZhUwRsAIuVDT0TKwcXDzB-EKiEsAGrHBWVjbg0PCOzm7oAF6e3r7+MIG8IQJhXNyl0SJikgksSZbWeMAA7tlQggbKkXxMggCMBuZAA)
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, das TypeScript-Beispiel mit „Find All References“ und dem im Issue beschriebenen Fall inferFromUsage zu reproduzieren. Verfolge, wie Implementierungen von Interfaces während der Referenzsuche und der Usage-Inferenz zugeordnet werden, und füge anschließend eine gezielte Abdeckung hinzu, die zeigt, dass Bar.transform und Baz.transform unabhängig voneinander behandelt werden; abgeschlossen ist die Aufgabe, wenn die Ergebnisse und die inferierten Typen dem erwarteten Verhalten entsprechen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- typescript
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100