microsoft / microsoft/TypeScript
Type narrowing for optional chaining in OR expression in AND expression
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Go
- Estrellas
- 111k
- Forks
- 14.4k
- Merge medio
- 1 d 19 h
- PR fusionados (30 d)
- 117
Descripción
TypeScript Nightly version 3.8.0-dev.20191113
Playground link
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,
"experimentalDecorators": false,
"emitDecoratorMetadata": false,
"target": "ES2017",
"module": "ESNext"
}
}
Input:
const f = (a: { b: boolean, c: number } | undefined) => (a?.b || null) && a.c;
Output:
Compiler error: Object is possibly 'undefined'.(2532)
Expected behavior:
Successful compilation
Note:
const f = (a: { b: boolean, c: number } | undefined) => (a?.b || false) && a.c;
(using false instead of null) works as expected.
Related issues:
https://github.com/microsoft/TypeScript/issues/34570
https://github.com/microsoft/TypeScript/issues/33806
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con el TypeScript Playground enlazado y reproduce el error en la expresión proporcionada con optional chaining; después, compárala con la expresión funcional que usa false. Revisa las issues relacionadas para obtener contexto; se considera terminado cuando la entrada original compila correctamente sin perder el comportamiento de narrowing esperado.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- typescript
- Área
- compilers
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 45/100