microsoft / microsoft/TypeScript
`Exclude<Exclude<T, null>, undefined>` is not assignable to `Exclude<T, null | undefined>` and vice versa
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: Nightly
Search Terms:
typescript nullness inference
Expected behavior:
They should be assignable to each other.
Actual behavior:
They are not considered assignable to each other.
Type 'Exclude<Exclude<T, null>, undefined>' is not assignable to type 'Exclude<T, null | undefined>'.
Type 'Exclude<T, null>' is not assignable to type 'Exclude<T, null | undefined>'.
Type 'T' is not assignable to type 'Exclude<T, null | undefined>'.(2322)
and
Type 'Exclude<T, null | undefined>' is not assignable to type 'Exclude<Exclude<T, null>, undefined>'.
Type 'T' is not assignable to type 'Exclude<Exclude<T, null>, undefined>'.(2322)
Related Issues:
N/A
Code
export function f<T>(v: Exclude<Exclude<T, null>, undefined>) {
const w: Exclude<T, null | undefined> = v;
}
export function g<T>(v: Exclude<T, null | undefined>) {
const w: Exclude<Exclude<T, null>, undefined> = v;
}
Output
export function f(v) {
const w = v;
}
export function g(v) {
const w = v;
}
Compiler Options
{
"compilerOptions": {
"noImplicitAny": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"strictPropertyInitialization": true,
"strictBindCallApply": true,
"noImplicitThis": true,
"noImplicitReturns": true,
"useDefineForClassFields": false,
"alwaysStrict": true,
"allowUnreachableCode": false,
"allowUnusedLabels": false,
"downlevelIteration": false,
"noEmitHelpers": false,
"noLib": false,
"noStrictGenericChecks": false,
"noUnusedLocals": false,
"noUnusedParameters": false,
"esModuleInterop": true,
"preserveConstEnums": false,
"removeComments": false,
"skipLibCheck": false,
"checkJs": false,
"allowJs": false,
"declaration": true,
"experimentalDecorators": false,
"emitDecoratorMetadata": false,
"target": "ES2017",
"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
Beginne mit dem bereitgestellten Playground-Link und den generischen Funktionen f und g unter den aufgeführten strikten Compileroptionen. Verfolge, wie der Compiler die beiden verschachtelten Exclude-Typen prüft, und verifiziere anschließend, dass beide Zuweisungen ohne die gemeldeten TS2322-Fehler akzeptiert werden, während die gezeigte ausgegebene Ausgabe erhalten bleibt.
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
- 35/100