javascript - ¿cuál es el propósito de usar la palabra clave 'is' en la anotación de tipo de Typescript?
Estoy leyendo un libro de Typescript y vi un código como este:
class Product {
...
}
function Test(args): args is Product {
return args instanceof Product;
}
Pero ¿no es que el tipo de retorno de la función es booleano? así que podemos escribir una función normal como:
function Test(args): boolean {
return args instanceof Product;
}
¿Cuáles son los beneficios de usar la anotación de tipo de retorno como args is XXX en lugar de un simple boolean?
Respuesta #1
Estás describiendo el uso de un guardia de tipo definido por el usuario.
El ejemplo de la documentación ilustra cómo estos pueden ser útiles al restringir un tipo unión.
function isFish(pet: Fish | Bird): pet is Fish {
return (pet as Fish).swim !== undefined;
}
Cualquier ramificación condicional de tu código reducirá el tipo a Pez si nadar está definido.
if (isFish(pet)) {
pet.swim(); // compiler knows that `pet` is of the `Fish` type
}
