microsoft / microsoft/TypeScript
Generic indexed access on type with optional properties doesn't include `undefined` in its constraint in `exactOptionalPropertyTypes`
Nessuno ha ancora preso questa issue.
- Lingua principale
- Go
- Stelle
- 111k
- Fork
- 14.4k
- Merge medio
- 1g 19h
- PR unite (30g)
- 117
Descrizione
🔎 Search Terms
exactOptionalPropertyTypes optional generic indexed access undefined missing contextual constraint eopt
🕗 Version & Regression Information
- This changed in 5.3.0-dev.20230914
⏯ Playground Link
💻 Code
// @exactOptionalPropertyTypes: true
interface XStateConfiguration {
theme?: "auto" | "dark" | "light";
viewColumn?: "beside" | "active";
}
declare function getVscodeConfiguration<T>(section: string): T | undefined;
export function getConfiguration<Name extends keyof XStateConfiguration>(
name: Name,
): XStateConfiguration[Name] {
const genericAssignabilityTest: XStateConfiguration[Name] = undefined; // error
return getVscodeConfiguration(name); // error
}
const concreteAssignabilityTest: XStateConfiguration[keyof XStateConfiguration] = undefined; // ok
🙁 Actual behavior
undefined is not assignable to an indexed access like this in expression space
🙂 Expected behavior
I'd expect this to typecheck OK - just like the concrete example
Additional information about the issue
No response
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 il repro collegato di TypeScript Playground usando exactOptionalPropertyTypes e confronta le assegnazioni di accesso indicizzato generico con l’accesso indicizzato concreto. Traccia il percorso del controllo dei tipi per XStateConfiguration[Name] nello spazio delle espressioni e verifica che undefined sia accettato in modo coerente sia nelle assegnazioni sia nel valore restituito dalla funzione.
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