microsoft / microsoft/TypeScript

Private class field helpers throw a confusing error when in unbound method with undefined `this`

Abierto
#57,609 2 comentarios 0 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
1 d 19 h
PR fusionados (30 d)
117

Descripción

🔎 Search Terms

this undefined bind private identifier class __classPrivateFieldSet __classPrivateFieldGet bound unbound

🕗 Version & Regression Information
  • This is the behavior in every version I tried
⏯ Playground Link

https://www.typescriptlang.org/play?#code/MYGwhgzhAEBiD29oG8BQ0PQMQDcwgFcBTaAXmgEYAmAZgBYBudTAcyIBcA1fYgCgEoU0AE4cCwgHbR2ACwCWEAHS4eRBtAC+qLamDwJEdtABmiMtAlEA7nEQCmu-RHggiikPBa8ABqfiK2LlUBcwASZD8Ajm5CIgENb34HAHpk6AB5eAAHCAAaaABJaAATOWKJAHIjACM5CWKAQkcDI0CY4nNIttUUtIAVGWF4KwgALmgAYTAJCXgjUTBi6CzhOTx2EgBbIk3qomETIc3oaeh4aoArImAjKxl4CBJQSBhSpdmjYuvwUWg5dmazlc7k8Pm6sRC5HC4L4-AS-FQQA

💻 Code
class Foo {
    #value = 1234;
    getValue() { return this.#value; }
}

const foo = new Foo();

console.log(`foo.getValue() = ${foo.getValue()}`);

// Oops, I didn't bind!
const getValue = foo.getValue;

// Throws: Cannot read private member from an object whose class did not declare it
console.log(`getValue() = ${getValue()}`)

🙁 Actual behavior

Throws Cannot read private member from an object whose class did not declare it.

But the actual problem is that this is undefined and I had no idea!

🙂 Expected behavior

A special error for this when undefined; IIRC there's no possible way this would normally pass, so a special error would be a lot more clear.

Additional information about the issue

No response

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 acceso a un campo privado no vinculado en el TypeScript Playground enlazado y compáralo con la llamada vinculada mostrada en el issue. Sigue cómo el helper de private-field generado por el compilador informa del fallo; después haz que el caso de undefined-this produzca el error más claro descrito y verifica ambos ejemplos.

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

Evaluación

Stack tecnológico
javascript, 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
25/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.