itsource

is 키워드는 타이프스크립트에서 어떤 역할을 합니까?

mycopycode 2023. 3. 28. 21:47
반응형

is 키워드는 타이프스크립트에서 어떤 역할을 합니까?

이렇게 생긴 코드를 발견했어요.

export function foo(arg: string): arg is MyType {
    return ...
}

검색하지 못했습니다.is문서든 구글이든 꽤 흔한 단어이고 기본적으로 모든 페이지에 표시됩니다.

그 상황에서 키워드는 어떤 역할을 합니까?

자세한 내용은 사용자 정의 유형 가드 함수에 대한 참조를 참조하십시오.

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

function example(foo: any){
    if(isString(foo)){
        console.log("it is a string" + foo);
        console.log(foo.length); // string function
    }
}
example("hello world");

형식 술어 사용test is string상기의 형식(단순히 사용)으로boolean반환 타입의 경우) 이후isString()함수가 반환되면 호출됩니다.trueTypeScript는 함수에 대한 호출에 의해 보호되는 모든 블록에서 유형을 좁힙니다.컴파일러는 다음과 같이 생각할 것이다.foostring아래 보호 블록(아래 보호 블록에만 해당)

{
    console.log("it is a string" + foo);
    console.log(foo.length); // string function
}

형식 술어는 컴파일 시에만 사용됩니다.그 결과.js파일(런타임)은 TYPE을 고려하지 않기 때문에 차이가 없습니다.

아래 4가지 예에서 차이점을 설명하겠습니다.

예 1: 위의 예제 코드에는 컴파일 오류나 런타임 오류가 없습니다.

예 2: TypeScript가 타입을 좁혔기 때문에 다음 예제 코드에는 컴파일 오류(런타임 오류도 포함)가 발생합니다.string확인해보니toExponential소속되어 있지 않다string방법.

function example(foo: any){
    if(isString(foo)){
        console.log("it is a string" + foo);
        console.log(foo.length);
        console.log(foo.toExponential(2));
    }
}

예: 다음 예제 코드에는 컴파일 오류가 없지만 TypeScript는 다음 유형만 좁히기 때문에 런타임 오류가 발생합니다.string따라서 보호되고 있지만 그 이후에는 보호되지 않는 블록에서foo.toExponential컴파일 에러는 생성되지 않습니다(TypeScript는 이 오류를stringtype). 단, 실행 시string를 가지고 있지 않다.toExponential실행 시 오류가 발생합니다.

function example(foo: any){
    if(isString(foo)){
        console.log("it is a string" + foo);
        console.log(foo.length);
    }
    console.log(foo.toExponential(2));
}

예 4: 사용하지 않을 경우test is string(type 술어), TypeScript는 보호되고 있는 블록 내의 타입을 좁히지 않습니다.다음 예제 코드에는 컴파일 에러는 없지만 런타임 에러는 발생합니다.

function isString(test: any): boolean{
    return typeof test === "string";
}
function example(foo: any){
    if(isString(foo)){
        console.log("it is a string" + foo);
        console.log(foo.length);
        console.log(foo.toExponential(2));
    }
}

결론은 이다test is string(type 술어)는 개발자에게 코드가 런타임에러를 일으킬 가능성이 있음을 알리기 위해 컴파일 타임에 사용됩니다.javascript의 경우 개발자는 컴파일 시 오류를 알 수 없습니다.이것이 TypeScript를 사용하는 장점입니다.

제가 아는 유일한 용도는 "type 술어"를 지정하는 것입니다.arg is MyType)의 사용자 정의 타입 가드입니다.

참조의 "사용자 정의 유형 가드"를 참조하십시오.

여기 또 다른 참고 자료가 있습니다.

언급URL : https://stackoverflow.com/questions/40081332/what-does-the-is-keyword-do-in-typescript

반응형