Open
Description
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
.