수색…


통사론

  • typeof x === "타입 이름"
  • x instanceof TypeName
  • function (foo : any) : foo는 TypeName입니다. {/ * 부울 값을 반환하는 코드 * /}

비고

TypeScript에서 유형 주석을 사용하면 코드에서 처리해야 할 가능한 유형이 제한되지만 런타임 유형에 따라 다른 코드 경로를 사용해야하는 경우는 여전히 일반적입니다.

타입 가드 (type guards)는 강하게 타이핑되고 캐스트 (타입 어설 션 (type assertion)이라고도 함)를 피하면서 변수의 런타임 유형을 기준으로 차별화 된 코드를 작성할 수있게합니다.

instanceof 사용

instanceof 는 변수가 any 유형이어야 any .

이 코드 ( 시도해보십시오 ) :

class Pet { }
class Dog extends Pet {
    bark() {
        console.log("woof");
    }
}
class Cat extends Pet {
    purr() {
        console.log("meow");
    }
}

function example(foo: any) {
    if (foo instanceof Dog) {
        // foo is type Dog in this block
        foo.bark();
    }

    if (foo instanceof Cat) {
        // foo is type Cat in this block
        foo.purr();
    }
}

example(new Dog());
example(new Cat());

인쇄물

woof
meom

콘솔에.

typeof 사용

typeof 는 유형 number , string , booleansymbol 를 구별해야 할 때 사용됩니다. 다른 문자열 상수는 오류가 아니지만 유형을 좁히는 데 사용되지 않습니다.

instanceof 와 달리 typeof 는 모든 유형의 변수와 함께 작동합니다. 아래 예제에서 foonumber | string 로 입력 할 수 있습니다. 문제가없는 number | string .

이 코드 ( 시도해보십시오 ) :

function example(foo: any) {
    if (typeof foo === "number") {
        // foo is type number in this block
        console.log(foo + 100);
    }

    if (typeof foo === "string") {
        // fooi is type string in this block
        console.log("not a number: " + foo);
    }
}

example(23);
example("foo");

인쇄물

123
not a number: foo

유형 보호 기능

원하는 로직을 사용하여 유형 가드 역할을하는 함수를 선언 할 수 있습니다.

그들은 다음과 같은 형식을 취합니다.

function functionName(variableName: any): variableName is DesiredType {
    // body that returns boolean
}

함수가 true를 반환하면 TypeScript는 함수 호출에 의해 보호되는 블록에서 유형을 DesiredType 으로 좁 힙니다.

예를 들어 ( 시도해보십시오 ) :

function isString(test: any): test is string {
    return typeof test === "string";
}

function example(foo: any) {
    if (isString(foo)) {
        // foo is type as a string in this block
        console.log("it's a string: " + foo);
    } else {
        // foo is type any in this block
        console.log("don't know what this is! [" + foo + "]");
    }
}

example("hello world");          // prints "it's a string: hello world"
example({ something: "else" });  // prints "don't know what this is! [[object Object]]"

가드의 함수 유형 술어 ( foo is Bar 함수 리턴 유형 위치의 foo is Bar 임)는 컴파일 타임에 유형을 좁히기 위해 사용되며, 런타임시 함수 본문이 사용됩니다. 술어와 함수 유형이 일치해야합니다. 그렇지 않으면 코드가 작동하지 않습니다.

유형 가드 기능은 typeof 또는 instanceof 를 사용할 필요가 없으므로 더 복잡한 논리를 사용할 수 있습니다.

예를 들어,이 코드는 버전 문자열을 확인하여 jQuery 객체가 있는지를 확인합니다.

function isJQuery(foo): foo is JQuery {
    // test for jQuery's version string
    return foo.jquery !== undefined;
}

function example(foo) {
    if (isJQuery(foo)) {
        // foo is typed JQuery here
        foo.eq(0);
    }
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow