[casting] TypeScript 또는 JavaScript 유형 캐스팅

TypeScript 또는 Javascript에서 유형 캐스팅을 어떻게 처리합니까?

다음 TypeScript 코드가 있다고 가정 해보십시오.

module Symbology {

    export class SymbolFactory {

        createStyle( symbolInfo : SymbolInfo) : any {
            if (symbolInfo == null)
            {
                 return null;
            }

            if (symbolInfo.symbolShapeType === "marker") {

                // how to cast to MarkerSymbolInfo          
                return this.createMarkerStyle((MarkerSymbolInfo) symbolInfo);
            }
        }

        createMarkerStyle(markerSymbol : MarkerSymbolInfo ): any {
            throw "createMarkerStyle not implemented";
        }

    }
}

SymbolInfo기본 클래스는 어디에 있습니까 ? 어떻게에서 타입 캐스팅 처리하나요 SymbolInfo까지를 MarkerSymbolInfo타이프 또는 자바 스크립트?



답변

다음과 같이 캐스팅 할 수 있습니다.

return this.createMarkerStyle(<MarkerSymbolInfo> symbolInfo);

또는 tsx 모드와 호환되도록하려면 다음과 같이하십시오.

return this.createMarkerStyle(symbolInfo as MarkerSymbolInfo);

이것은 컴파일 타임 캐스트이며 런타임 캐스트가 아니라는 것을 기억하십시오.


답변

이것을 TypeScript에서 타입 어설 션 이라고하며 TypeScript 1.6부터이를 표현하는 두 가지 방법이 있습니다.

// Original syntax
var markerSymbolInfo = <MarkerSymbolInfo> symbolInfo;

// Newer additional syntax
var markerSymbolInfo = symbolInfo as MarkerSymbolInfo;

두 대안 모두 기능적으로 동일합니다 . -syntax 를 도입 한 이유 as는 원래 구문이 JSX 와 충돌 했기 때문 입니다. 여기서 디자인 토론을 참조 하십시오 .

당신이 선택할 수있는 위치에 있다면, 당신이 더 편안하다고 느끼는 구문을 사용하십시오. 나는 개인적 as으로 읽고 쓰는 것이 더 유창하다고 느끼기 때문에 -syntax를 선호합니다 .


답변

typescript에서는 instanceofif 문을 체크인 할 수 있으며 Typed속성 을 사용하여 동일한 변수에 액세스 할 수 있습니다.

MarkerSymbolInfo라는 속성 이 있다고 가정 해 봅시다 marker. 다음을 수행 할 수 있습니다.

if (symbolInfo instanceof MarkerSymbol) {
    // access .marker here
    const marker = symbolInfo.marker
}

변수를 다른 변수 이름에 다시 할당 할 필요없이 동일한 변수를 사용하여 변수의 인스턴스를 얻는 것은 약간의 트릭입니다.

자세한 내용은 다음 두 가지 리소스를 확인하십시오.

TypeScript 인스턴스
JavaScript 인스턴스


답변