Eu tenho esse script:
type Input = string
function util(input: Input) {
return input
}
function main(input: Input | null) {
const isNull = input === null
if (isNull) {
return 'empty string'
}
input = util(input) //error
}
O erro é:Argument of type 'string | null' is not assignable to parameter of type 'string'. Type 'null' is not assignable to type 'string'.
No entanto, isso não acontece se:
- A última linha é
return util(input)
, ou - A linha de condição é encurtada para
if (input === null)
Por que é que?
Pode parecer contra-intuitivo - e é na minha opinião - mas o Typescript não pode usar uma variável intermediária para inferir o tipo de valores que foram usados para dar valor a essa variável.
Você precisa usar
if (input === null)
ou escrever e usar um tipo predicadoisNull
.EDITAR:
Aqui está como seria usar um predicado de tipo:
Não tenho certeza se isso está acrescentando alguma coisa à simples escrita
if (value === null)
.