microsoft / microsoft/TypeScript
Assertion signature on contextual 'this'-parameter doesn't narrow and has no error
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.4k
- Ø Merge
- 1 T. 19 Std.
- Gemergte PRs (30 T.)
- 117
Beschreibung
TypeScript Version: 4.2.0-dev.20210101
Search Terms: asserts this
Expected behavior:
Consistent behavior. Either
this.assert(v)narrowsvthis.asserthas an error about missing type annotation, no narrowing,this.returnNever()should not mark the following code as unreachable
Actual behavior:
No narrowing from asserts, no error on call expression, never-returning function has control flow effect.
Code
declare function makeContextualThisParameter<T>(cb: (this: T) => any): void;
makeContextualThisParameter<{assert(v: any): asserts v}>(function() {
const v = Boolean();
this.assert(v); // expected error here
v; // or narrowing `v: true` here
});
makeContextualThisParameter<{returnNever(): never}>(function() {
this.returnNever();
debugger; // this is marked as unreachable
});
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
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
Reproduziere die kontextbezogenen this-Beispiele im Issue mit TypeScript 4.2.0-dev.20210101 und den aufgeführten Compileroptionen, wobei der bereitgestellte Playground-Link als Ausgangspunkt dient. Verfolge, wie Assertion-Signaturen und Aufrufe, die never zurückgeben, sich auf Narrowing und Erreichbarkeit auswirken, und füge anschließend eine Regressionstestabdeckung hinzu, die das erwartete Diagnose- oder Narrowing-Verhalten zeigt.
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
- Veraltet
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 25/100