[typescript] Typescript에서 변수 유형을 얻는 방법은 무엇입니까?

변수가 있습니다.

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`
}

다른 종류의 경비도 있습니다 예를 들어, inhttps://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();
    }
}


답변