Приведение типов 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 to MarkerSymbolInfo в TypeScript или Javascript?
2 ответов:
вы можете бросить так:
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;оба варианта функционально идентичны. Причина введения
as-синтаксис заключается в том, что исходный синтаксис конфликтует с JSX см. обсуждения здесь.Если вы находитесь в состоянии выбрать, просто используйте синтаксис, который вы чувствуете себя более комфортно. Я лично предпочитаю
as-синтаксис, как он чувствует себя более свободно читать и писать.
Comments