microsoft / microsoft/TypeScript
`Exclude<Exclude<T, null>, undefined>` is not assignable to `Exclude<T, null | undefined>` and vice versa
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.4k
- Merge moyen
- 1 j 19 h
- PR mergées (30 j)
- 117
Description
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
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par le lien Playground fourni et les fonctions génériques f et g avec les options strictes du compilateur indiquées. Suivez la manière dont le compilateur vérifie les deux types Exclude imbriqués, puis vérifiez que les deux affectations sont acceptées sans les erreurs TS2322 signalées, tout en conservant la sortie générée affichée.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- typescript
- Domaine
- compilers
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 35/100