microsoft / microsoft/TypeScript

TypeScript fails to detect self-reference issue in "Parameter Properties" of constructors

Abierto
#62,414 2 comentarios 1 reacción 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Bug Domain: check: Control Flow Help Wanted
Lenguaje dominante
Go
Estrellas
111k
Forks
14.3k
Merge medio
2 d 4 h
PR fusionados (30 d)
132

Descripción

### 🔎 Search Terms

* private property self reference
* private property self reference constructor
* Parameter Properties constructor self reference

### 🕗 Version & Regression Information

- This is reproducible at least between v4.9.5 and nightly -- I have not tried earlier versions

### ⏯ Playground Link

https://www.typescriptlang.org/play/?target=9&module=1&ts=5.9.2#code/JYWwDg9gTgLgBAbzgKwsAdnAhgZzgfQDM4BfOQqCEOAcnQgBMBTALjCxgAsaBuAKD5YARjhhQsAY3gSANrjwBZAJ4BhOThwAhXE0QC4BuAHojcLsDwB3YDJlwJWAK45dFnI9eYA5gAoAlACEfIb2EOiiUI5S0HA+YFDAAG4cuoQsZkpgTBDERHAAvOR+eiEk+oZesQB0NVhQXjjpERheANoAusUIwSGGUEwwjlCY5jhVhD41VXUNfvylAj0GRgBUxqajcAwQTHj08JbQANYANHCcEJZMiUxQS3AgSgBijpg+aRlZOQTEhYRd9xCEzm9xIKyMfDKAlk8jgADkmJY1LCmAAPGBMdAMRSqdRaHQlQyoDDVWr1RpwZroNqdQm9MycCxVXxTGY4EELKESMKiewFODoRHwxHIjT+fjc8IQGRMKoyCC+CRVYnoHw0LA0M40ISa2gSGh+OZwIA

### 💻 Code

```ts
import { join as _f } from 'node:path';

abstract class MyClassBase {

// this will cause issue in g()!
constructor (private f: typeof _f = f) {
}

g (...args: string[]) {
return this.f(...args);
}

/* // this does not work, however
myFun (f: typeof _f = f) {
f();
}*/
}

class NewClass extends MyClassBase {
join (...args: string[]) {
this.g(...args);
}
}

const c = new NewClass();
console.log(c.join('a', 'b', 'c'));
```

### 🙁 Actual behavior

TypeScript compiler does not report any errors.

if you copy transpiled JS file and run that with Node.js, you will see

```
constructor(f = f) {
^

ReferenceError: Cannot access 'f' before initialization
```

### 🙂 Expected behavior

TypeScript clearly shows an error, similar to what would have been seen in regular function parameters

```
Parameter 'f' cannot reference itself.
```

### Additional information about the issue

The issue originated from this -- https://github.com/microsoft/vscode-js-debug-browsers/issues/19, and I just discovered that the issue in the project or TypeScript has never been fixed. If someone at Microsoft could do a favor and ping the maintainer of that repo as well, it will be much appreciated.

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

Comienza con la reproducción vinculada en Playground y con el tratamiento por parte del compilador de las propiedades de parámetros del constructor, comparándolo con las comprobaciones de autorreferencia de los parámetros de funciones normales. Confirma el fallo del JavaScript generado y añade cobertura en el compilador para que el caso del constructor informe de un error como “Parameter 'f' cannot reference itself.”

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
4/5
Tiempo estimado
3-5 días
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.