Inability to use typeof on an ES private property
See original GitHub issueBug Report
🔎 Search Terms
- typeof
- private
🕗 Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about private and typeof
⏯ Playground Link
Playground link with relevant code
💻 Code
class Example {
#privateProp = 'hello';
constructor() {
const p: typeof this.#privateProp = 'world';
const p2: Example['#privateProp'] = 'world';
}
}
The example is kept short for reproduction, but in practice this is more for cases where you would want to use keyof this.#someProperty
and similar constructs (since here the type could just be inferred).
🙁 Actual behavior
Specifying a type using const name: typeof this.#anESprivateProperty
is not possible.
For p
, the error is that an identifier is expected (because it’s a PrivateIdentifier
and not an Identifier
from the compiler’s pov?).
For p2
, the error is that the property does not exist on the type, which is logical when done from “outside” the class where the property should not be visible.
🙂 Expected behavior
Having the ability to use typeof on an ES private property from “inside” the class itself where that property is visible, e.g. like in the example code above.
Issue Analytics
- State:
- Created 2 years ago
- Reactions:2
- Comments:9 (4 by maintainers)
Top GitHub Comments
For now I would not support indexed access lookup (
const p: C["#p"]
or variants thereof); it’s very messy. Accessing the type of a private property from outside the class is a huge code smell since it breaks under declaration emit, and should really be avoided.typeof this.#p
(from inside the class) should be the only way to get at it.already in use with public properties.
https://www.typescriptlang.org/play?#code/MYGwhgzhAECiAeYC2AHEBTaBvAsAKGmgGIUAnASwDcwAXdABVIHsVoBeaAcgAt0QQmnANz58hANqcSAVwBGIcsEYtOAXQBc0AHbSks9KXwBfUXhoBPFJmWsOCZGnSSZ8xTbVA