microsoft / microsoft/TypeScript

"Find All References" shows all interface implementations instead of specific class method references

Abierto
#61,484 1 comentario 2 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Awaiting More Feedback Suggestion
Lenguaje dominante
Go
Estrellas
111k
Forks
14.3k
Merge medio
2 d 4 h
PR fusionados (30 d)
132

Descripción

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:**
1. Create a TypeScript file with the following code:
```ts
export declare interface Transform {
transform(value: any, ...args: any[]): any;
}

export class Bar implements Transform {
transform() {}
}

export class Baz implements Transform {
transform() {}
}
```
2. Right-click on the `transform` method inside the `Bar` class.
3. Select **"Find All References"** from the context menu.
4. The results include all occurrences of `transform`, including the interface definition and the implementation in `Baz`.

#### **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:

```ts
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)](https://ts-ast-viewer.com/#code/KYDwDg9gTgLgBAE2AYwDYEMrDgSwHYzBQBm6y2AKlOngM7HQC2cA3gFBydwzV0NSMAFADd0qAK7AAXHBoBPADRwAdKswBzWjPkBtALoBKbXjkBuNgF82bUJFhw06WrTgAhTLkZhUwRsAIuVDT0TKwcXDzB-EKiEsAGrHBWVjbg0PCOzm7oAF6e3r7+MIG8IQJhXNyl0SJikgksSZbWeMAA7tlQggbKkXxMggCMBuZAA)

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Empieza reproduciendo el ejemplo de TypeScript con “Find All References” y el caso de inferFromUsage descrito en el issue. Sigue cómo se asocian las implementaciones de interfaces durante la búsqueda de referencias y la inferencia de uso; después, añade cobertura específica que muestre que Bar.transform y Baz.transform se tratan de forma independiente; se considera terminado cuando los resultados y los tipos inferidos coinciden con el comportamiento esperado.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
typescript
Área
compilers
Tipo de issue
Error
Dificultad
5/5
Tiempo estimado
Más de una semana
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.