microsoft / microsoft/TypeScript
Type inference inconsistency with generic constraints
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.3k
- Ø Merge
- 2 T. 4 Std.
- Gemergte PRs (30 T.)
- 132
Beschreibung
Bug Report
🔎 Search Terms
- type inference const string
- type inference generic constraints
🕗 Version & Regression Information
Tested on
- 3.9.7
- 4.2.3
- 4.3.0-beta
⏯ Playground Link
💻 Code
Following Generic Constraints
type Concatable<T> = {
concat: (...xss: T[]) => T
};
export const concat = <T extends Concatable<T>>
(xs: T, ...xss: T[] ): T => xs.concat( ...xss );
export const test_1 = concat([1, 2], [3, 4]); // OK
export const test_2 = concat("foo" as string, "bar"); // OK
export const test_3 = concat<string>("foo", "bar"); // OK
// Expected: 'test_4: string'
// Got: 'test_4: Concatable<"foo" | "bar">'
export const test_4 = concat("foo", "bar");
// Error: ^^^^^
// Argument of type 'string' is not assignable to
// parameter of type 'Concatable<"foo" | "bar">'
🙁 Actual behavior
test_4: Concatable<"foo" | "bar">
TS leaks the constraint for type T into type T
TS provides no good way to make Rust-like trait
🙂 Expected behavior
T, test_4, "foo" and "bar" all infer type string
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
Reproduzieren Sie das Beispiel zur generischen Einschränkung im verlinkten TypeScript Playground über die aufgeführten Versionen hinweg und untersuchen Sie den inferierten Typ von test_4. Die Korrektur ist abgeschlossen, wenn concat("foo", "bar") string ohne Fehler inferiert, entsprechend dem erwarteten Verhalten, während die anderen Beispiele erhalten bleiben.
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