microsoft / microsoft/TypeScript
JS ES6 class derived member functions typed with literals don't get assigned the correct type
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.4k
- Ø Merge
- 1 T. 19 Std.
- Gemergte PRs (30 T.)
- 117
Beschreibung
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.
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne mit der verknüpften TypeScript Playground-Reproduktion und vergleiche die inferierten Typen für Base::test und Derived::test. Verfolge, wie überschriebene ES6-Methoden Literal-Rückgabetypen inferieren, und überprüfe anschließend, dass die abgeleitete Funktion gegen die Literal-Union des Basistyps akzeptiert wird, ohne die Literal-Typen zu verlieren.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- typescript
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 35/100