Escrevi uma função que retorna uma função que resolve a fome no mundo, mas somente se alguém ainda estiver com fome, caso contrário, será nulo.
Se, e somente se, alguém ainda estiver com fome, a função interna é criada e inclui a variável const informando se alguém ainda está com fome.
Durante a execução desta função, sabemos logicamente que a variável foi reduzida para true
ou "fileNotFound
.
E a edição #56908 de @ahejlsberg admite que deveria funcionar:
Atualmente preservamos refinamentos de tipo em fechamentos para variáveis const
Mas o TypeScript reclama.
O playground mostra os tipos:
type IsStillHungry = true | false | 'fileNotFound' | undefined
function solveWorldHungerStrategy(opts: { isAnyoneStillHungry: IsStillHungry }) {
const condition = opts.isAnyoneStillHungry
if (condition) {
condition
// ^? const condition: true | "fileNotFound"
function pretendToSolveWorldHunger() {
condition
// ^? const condition: boolean | "fileNotFound" | undefined
}
return pretendToSolveWorldHunger
}
return null
}