microsoft / microsoft/TypeScript
JS ES6 class derived member functions typed with literals don't get assigned the correct type
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
In rare cases (such as when literals are used in a type constraint), ES6 class overridden functions will cause strange issues when returning said literals from the derived function.
🔎 Search Terms
ts es6 class derived
🕗 Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about ES6 classes
⏯ Playground Link
Playground link with relevant code
💻 Code
class Base
{
test()
{
if (Math.random() > 0.5)
return 5;
return false;
}
}
class Derived extends Base
{
// error here: for some reason, Derived::test() is typed as "() => boolean"
// even though the literal false is being returned, and as such it says it can't
// match Base::test
test()
{
return false;
}
}
🙁 Actual behavior
The derived function's auto-typing assumes it is the literals' actual type, such as number or boolean, instead of the literals themselves. Derived::test, if not overridden, is typed as () => false, which should match () => 5 | false, but because it's typed as boolean instead it breaks (this only seems to happen if we're overriding a base member function)
🙂 Expected behavior
The derived function should be able to match if the typing is handled as normal.
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
Comienza con la reproducción vinculada de TypeScript Playground y compara los tipos inferidos para Base::test y Derived::test. Sigue cómo los métodos ES6 sobrescritos infieren tipos de retorno literales y, a continuación, verifica que la función derivada sea aceptada frente a la unión literal de la base sin perder los tipos literales.
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
- Bien especificado
- Aptitud para principiantes
- 35/100