microsoft / microsoft/TypeScript
Annotate immediately-invoked functions for inlining flow control analysis
Nessuno ha ancora preso questa issue.
- Lingua principale
- Go
- Stelle
- 111k
- Fork
- 14.4k
- Merge medio
- 1g 19h
- PR unite (30g)
- 117
Descrizione
Per #9998 and its many offshoots, we have problems analyzing code like this
let x: string | number = "OK";
mystery(() => {
x = 10;
});
if (x === 10) { // Error, we believe this to be impossible
}
The problem is that we don't know if mystery invokes its argument "now" or "later" (or possibly even never!).
The converse problem appears during reads:
let x: string | number = ...;
if (typeof x === 'string') {
// Error, toLowerCase doesn't exist on string | number
let arr = [1, 2, 3].map(n => x.toLowerCase());
}
Proposal is to allow some form of indicating that the function is invoked immediately, e.g.
declare function mystery(arg: immediate () => void): void;
This would "inline" the function body for the purposes of flow control analysis
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 i due esempi TypeScript nell’issue e traccia il modo in cui l’analisi del controllo di flusso gestisce le scritture e le letture con tipo ristretto all’interno dei callback. Identifica gli entry point del type-checker coinvolti e determina la semantica prevista dell’annotazione; il lavoro è completo quando i callback invocati immediatamente vengono analizzati nel flow circostante, mentre quelli invocati in seguito o mai non lo vengono.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- typescript
- Ambito
- compilers
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 30/100