microsoft / microsoft/TypeScript
Object spread works for unconstrained generic
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
TypeScript Version: 3.8.3
Search Terms:
generic
spread
unrestrained
unrestricted
Expected behavior:
The spread function should not compile because T is not constrained to a type that can be spread.
Actual behavior:
It compiles.
Related Issues:
https://github.com/microsoft/TypeScript/issues/30129
https://github.com/microsoft/TypeScript/pull/13288
Code
function spread<T>(t: T) {
// This should not compile
return { ...t };
}
// The type of `result` is `number` even though the value of `result` is `{}`
const result = spread(5);
Output
"use strict";
function spread(t) {
// This should not compile
return Object.assign({}, t);
}
// Result is still a number when in reality it's {}
const result = spread(5);
Compiler Options
{
"compilerOptions": {
"noImplicitAny": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"strictPropertyInitialization": true,
"strictBindCallApply": true,
"noImplicitThis": true,
"noImplicitReturns": true,
"alwaysStrict": true,
"esModuleInterop": true,
"declaration": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"moduleResolution": 2,
"target": "ES2017",
"jsx": "React",
"module": "ESNext"
}
}
Playground Link: Provided
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
Reproduziere das Verhalten im bereitgestellten Playground-Link mit TypeScript 3.8.3 und den aufgeführten Compileroptionen. Lies den zugehörigen Issue und Pull Request und verfolge, wie der Compiler object spread für einen unconstrained generic behandelt. Erledigt ist die Aufgabe, wenn das Beispiel wie erwartet abgelehnt wird und der resultierende Typ nicht länger fälschlicherweise der Argumenttyp bleibt.
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