Mam zmienną.
abc:number|string;
Jak mogę sprawdzić jego typ? Chcę zrobić coś takiego jak poniżej:
if (abc.type === "number") {
// do something
}
Mam zmienną.
abc:number|string;
Jak mogę sprawdzić jego typ? Chcę zrobić coś takiego jak poniżej:
if (abc.type === "number") {
// do something
}
Odpowiedzi:
Dla :
abc:number|string;
Użyj operatora JavaScripttypeof :
if (typeof abc === "number") {
// do something
}
TypeScript rozumie typeof🌹
Nazywa się to strażnikiem.
Na zajęcia użyłbyś instanceofnp
class Foo {}
class Bar {}
// Later
if (fooOrBar instanceof Foo){
// TypeScript now knows that `fooOrBar` is `Foo`
}
Istnieją również inne rodzaje zabezpieczeń, np. inItp. Https://basarat.gitbooks.io/typescript/content/docs/types/typeGuard.html
Chciałbym dodać, że TypeGuards działają tylko na łańcuchach lub liczbach, jeśli chcesz porównać obiekt, użyj instanceof
if(task.id instanceof UUID) {
//foo
}
classes, ale nie za pomocą TypeScript interfaces lub types, ponieważ nie istnieją one w wyeksportowanym pliku JavaScript.
Sprawdziłem zmienną, czy jest to wartość logiczna, czy nie, jak poniżej
console.log(isBoolean(this.myVariable));
Podobnie mamy
isNumber(this.myVariable);
isString(this.myvariable);
i tak dalej.
instanceof
utilaby uzyskać dostęp do tych funkcji (np.import { isString } from 'util';
Inne odpowiedzi są poprawne, ale kiedy masz do czynienia z interfejsami , nie możesz używać typeof lub instanceof, ponieważ interfejsy nie są kompilowane do javascript.
Zamiast tego możesz użyć zabezpieczenia typecast + funkcji sprawdzania typu, aby sprawdzić swoją zmienną:
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();
}
}
A oto skompilowany JavaScript w ES2017:
function start(vehicle) {
vehicle.drive();
if (vehicle.ringTheBell) {
const bike = vehicle;
bike.ringTheBell();
}
else {
const car = vehicle;
car.honkTheHorn();
}
}
instanceofmimo że nie było to zadane pytanie.