¿Cómo obtener un tipo de variable en Typecript?
Tengo una variable.
abc:number|string;
¿Cómo puedo comprobar su tipo? Quiero hacer algo como a continuación:
if (abc.type === "number") {
// do something
}
Para :
abc:number|string;
Utilice el operador de JavaScripttypeof
:
if (typeof abc === "number") {
// do something
}
TypeScript entiende typeof
🌹
Esto se llama tipografía.
Más
Para las clases usarías, instanceof
por ejemplo.
class Foo {}
class Bar {}
// Later
if (fooOrBar instanceof Foo){
// TypeScript now knows that `fooOrBar` is `Foo`
}
También hay otros tipos de guardias, por ejemplo, in
etc. https://basarat.gitbook.io/typescript/type-system/typeguard
Las otras respuestas son correctas, pero cuando se trata de interfaces no se puede usar typeof ostanceof porque las interfaces no se compilan en javascript.
En su lugar, puede utilizar un tipo de verificación de función encasillado + para verificar su variable:
interface Car {
drive(): void;
honkTheHorn(): void;
}
interface Bike {
drive(): void;
ringTheBell(): void;
}
function start(vehicle: Bike | Car ) {
vehicle.drive();
// typecast and check if the function exists
if ((<Bike>vehicle).ringTheBell) {
const bike = (<Bike>vehicle);
bike.ringTheBell();
} else {
const car = (<Car>vehicle);
car.honkTheHorn();
}
}
Y este es el JavaScript compilado en ES2017:
function start(vehicle) {
vehicle.drive();
if (vehicle.ringTheBell) {
const bike = vehicle;
bike.ringTheBell();
}
else {
const car = vehicle;
car.honkTheHorn();
}
}
Me gustaría agregar que TypeGuards solo funciona en cadenas o números, si desea comparar un objeto, use la instancia de
if(task.id instanceof UUID) {
//foo
}