microsoft / microsoft/TypeScript
Using nullish coalescing with untyped field in constructor trigger TS7022
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Go
- Estrellas
- 111k
- Forks
- 14.4k
- Merge medio
- 1 d 19 h
- PR fusionados (30 d)
- 117
Descripción
Bug Report
Using nullish coalescing in a constructor to initialize a class member with no type annotation will result in a TS7022 error.
🔎 Search Terms
nullish, coalescing, 7022, ??, and ts7022
🕗 Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about nullish coalescing and type inference.
⏯ Playground Link
Playground link with relevant code
💻 Code
export class Node {
#parent
#children = new Children(this)
constructor (parent?: Node | null | undefined) {
// Remove `??` and the code after and the code compiled. Now #parent is undefined which is not desired.
this.#parent = parent ?? null
}
get parent () { return this.#parent }
get children () { return this.#children }
}
export class Children {
#parent
#head
#tail
constructor (parent: Node) {
this.#parent = parent
this.#head = new Node(parent)
this.#tail = new Node(parent)
}
}
🙁 Actual behavior
Attempting to compile the example code results in a TS7022 error: '#parent' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.
🙂 Expected behavior
The code should compile and #parent should be typed as Node | null.
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Reproduce el problema con el TypeScript Playground enlazado y las clases Node y Children proporcionadas. Traza cómo el compilador gestiona los campos privados sin tipo y la coalescencia de nulos en torno a TS7022; se considera terminado cuando el ejemplo compila y #parent se infiere como Node | null sin una anotación.
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
- 38/100