microsoft / microsoft/TypeScript
`asserts` keyword does not enhance hoisted function type, works on functions assigned to a variable
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.3k
- Ø Merge
- 2 T. 4 Std.
- Gemergte PRs (30 T.)
- 132
Beschreibung
TypeScript Version: 4.0.2, 4.1.0-beta
Search Terms:
asserts function
Code
interface LabelledFunction { label: string; }
function assignLabel(fn: () => unknown, label: string): asserts fn is LabelledFunction {
Object.assign(fn, { label });
}
function a() { }
assignLabel(a, 'a');
console.info(a.label); // Property 'label' does not exist on type '() => void'.(2339)
const b = function () { };
assignLabel(b, 'b');
console.info(b.label); // works as expected
const c = () => { };
assignLabel(c, 'c');
console.info(c.label); // works as expected
Expected behavior:
At least in runtime code coming after assignLabel(a, 'a');, a.label should be accessible.
Actual behavior:
Property 'label' does not exist on type '() => void'.(2339)
Playground Link: link
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
Beginne mit der verlinkten TypeScript Playground-Reproduktion und vergleiche die hoisted Funktion a mit den den Variablen zugewiesenen Funktionen b und c, nachdem assignLabel aufgerufen wurde. Verfolge das Verhalten des Type-Checkers für Assertion-Funktionen und bestätige die Fertigstellung, wenn a.label im Code nach dem Aufruf akzeptiert wird, ohne die funktionierenden Fälle zurückzusetzen.
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
- Ruhig
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 48/100