¿Cómo obtener un tipo de variable en Typecript?

Resuelto Hongbo Miao asked hace 8 años • 10 respuestas

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
}
Hongbo Miao avatar Feb 22 '16 12:02 Hongbo Miao
Aceptado

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, instanceofpor 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, inetc. https://basarat.gitbook.io/typescript/type-system/typeguard

basarat avatar Feb 22 '2016 05:02 basarat

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();
    }
}
artgrohe avatar Feb 21 '2020 08:02 artgrohe

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
}
DGK avatar Mar 30 '2017 11:03 DGK