변수가 있습니다.
abc:number|string;
유형을 어떻게 확인할 수 있습니까? 다음과 같이하고 싶습니다.
if (abc.type === "number") {
// do something
}
답변
대상 :
abc:number|string;
사용 자바 스크립트 연산자를 typeof
:
if (typeof abc === "number") {
// do something
}
TypeScript는 ?를 이해 typeof
합니다.
이를 typeguard라고합니다.
더
수업의 경우 instanceof
예를 들어
class Foo {}
class Bar {}
// Later
if (fooOrBar instanceof Foo){
// TypeScript now knows that `fooOrBar` is `Foo`
}
다른 종류의 경비도 있습니다 예를 들어, in
등 https://basarat.gitbooks.io/typescript/content/docs/types/typeGuard.html
답변
객체 사용 instanceof를 비교하려는 경우 TypeGuards는 문자열 또는 숫자에서만 작동한다는 것을 추가하고 싶습니다.
if(task.id instanceof UUID) {
//foo
}
답변
변수가 부울인지 여부를 아래와 같이 확인했습니다.
console.log(isBoolean(this.myVariable));
마찬가지로 우리는
isNumber(this.myVariable);
isString(this.myvariable);
등등.
답변
다른 대답은 맞지만 인터페이스를 다룰 때 를 인터페이스가 자바 스크립트로 컴파일되지 않기 때문에 typeof 또는 instanceof를 사용할 수 없습니다.
대신 typecast + function check typeguard를 사용하여 변수를 확인할 수 있습니다.
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();
}
}
그리고 이것은 ES2017에서 컴파일 된 JavaScript입니다.
function start(vehicle) {
vehicle.drive();
if (vehicle.ringTheBell) {
const bike = vehicle;
bike.ringTheBell();
}
else {
const car = vehicle;
car.honkTheHorn();
}
}