microsoft / microsoft/TypeScript
exactOptionsPropertyTypes - anomolous behavior with Tuples, options, and spreading.
Nessuno ha ancora preso questa issue.
- Lingua principale
- Go
- Stelle
- 111k
- Fork
- 14.4k
- Merge medio
- 1g 19h
- PR unite (30g)
- 117
Descrizione
Bug Report
🔎 Search Terms
- strictOptionalProperties #43947 #44548
- exactOptionalPropertyTypes
- Labelled Tuple Elements
- Optional Tuple Parameters (enabled with labeling)
- Variadic Tuple Types
🕗 Version & Regression Information
-
Spreading of Variadic Tuple types, as well as the ability to indicate final position optional parameters with labels, were introduced in ts 4.0. The noted behavior has been been present since then.
-
However, although there was hope it would be fixed with 4.4's exact
exactOptionsParameters, it was not.
⏯ Playground Link
💻 Code
type T1 = [x:number, x?:boolean]
const t11:T1 = [1,undefined] // EXCELLENT!! with exactOptionalPropertyTypes:true this became is an error.
const t12:T1 = [1,true]
const t13:T1 = [1]
type T2 = ['^',...T1,'$']
const t21:T2 = ['^',1,true,'$'];
const t22:T2 = ['^',1,undefined,'$']; // noerr - CLAIM - this SHOULD be an error
const t23:T2 = ['^',1,'$']; // err - CLAIM - this SHOULD NOT be an error
🙁 Actual behavior
In the above code, variable declaration for t22 is NOT an err.
In the above code, variable declaration for t23 IS an err.
🙂 Expected behavior
In the above code, variable declaration for t22 IS an err.
In the above code, variable declaration for t23 is NOT an err.
Even though with exactOptionalPropertyTypes , the T1 now no longer considers [number,undefined] to be a legal assignment, when T1 is spread into T2 the old behavior is used instead of the new behavior.
The documentation for exactOptionalPropertyTypes says
In TypeScript 4.4, the new flag --exactOptionalPropertyTypes specifies that optional property types should be interpreted exactly as written, meaning that
| undefinedis not added to the type:
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
Inizia con la riproduzione collegata di TypeScript Playground usando exactOptionalPropertyTypes e le assegnazioni di tuple T1/T2. Esamina il comportamento degli elementi opzionali delle tuple quando vengono espansi dei variadic tuples, quindi verifica che t22 venga rifiutato e t23 accettato, mentre i controlli T1 esistenti rimangono corretti.
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
- Abbastanza chiara
- Idoneità per principianti
- 35/100