microsoft / microsoft/TypeScript
Object spread works for unconstrained generic
Nessuno ha ancora preso questa issue.
- Lingua principale
- Go
- Stelle
- 111k
- Fork
- 14.3k
- Merge medio
- 2g 4h
- PR unite (30g)
- 132
Descrizione
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
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Riproduci il comportamento nel link Playground fornito usando TypeScript 3.8.3 e le opzioni del compilatore indicate. Leggi l’issue e la pull request correlate, quindi segui la gestione da parte del compilatore di object spread per un unconstrained generic. Il lavoro è completato quando l’esempio viene rifiutato come previsto e il tipo risultante non rimane più erroneamente il tipo dell’argomento.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- typescript
- Ambito
- compilers
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Specificata chiaramente
- Idoneità per principianti
- 35/100