microsoft / microsoft/TypeScript
String literal type inconsistency in overload resolution
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.3k
- Ø Merge
- 1 T. 19 Std.
- Gemergte PRs (30 T.)
- 117
Beschreibung
As far as I see, the TS compiler still sees a string literal type of a single literal as an old style "string parameter" thing. I thought that the concept of string literal types should replace overloading on string parameters, but seems that it doesn't.
That complicates things, and results in a "strange" behaviour in overload resolution:
class A256 {
m(a): any;
m(a: "a" | "b"): string;
m(a: "c"): string;
m(a): any {}
}
var foo1 = new A256().m("a"); // 'any'
var foo2 = new A256().m("c"); // 'string'
What should be the correct logic with string literal types in overload resolution?
Shouldn't overloads with unions of literals precede the others as well, when resolving overloads?
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 damit, das A256-Beispiel zu kompilieren und die abgeleiteten Typen von foo1 und foo2 mit dem erwarteten Verhalten der Überladungen zu vergleichen. Verfolge dann die Behandlung der Überladungsauflösung des Compilers für Vereinigungen von String-Literalen; abgeschlossen ist die Aufgabe, wenn das Verhalten definiert ist und das Beispiel gemäß dieser Regel konsistent aufgelöst wird, mit hinzugefügter Regressionstestabdeckung, falls die relevante Teststelle identifiziert wird.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- typescript
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 25/100