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에서는 instanceof
if 문을 체크인 할 수 있으며 Typed
속성 을 사용하여 동일한 변수에 액세스 할 수 있습니다.
MarkerSymbolInfo
라는 속성 이 있다고 가정 해 봅시다 marker
. 다음을 수행 할 수 있습니다.
if (symbolInfo instanceof MarkerSymbol) {
// access .marker here
const marker = symbolInfo.marker
}
변수를 다른 변수 이름에 다시 할당 할 필요없이 동일한 변수를 사용하여 변수의 인스턴스를 얻는 것은 약간의 트릭입니다.
자세한 내용은 다음 두 가지 리소스를 확인하십시오.