Приведение типов TypeScript или JavaScript

91

Как обрабатывать листинг типов в 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 - базовый класс. Как обрабатывать typecast от SymbolInfo до MarkerSymbolInfo в TypeScript или Javascript?

Теги:
casting

2 ответа

145
Лучший ответ

Вы можете сделать так:

return this.createMarkerStyle(<MarkerSymbolInfo> symbolInfo);

Или, например, если вы хотите быть совместимым с режимом tsx:

return this.createMarkerStyle(symbolInfo as MarkerSymbolInfo);

Просто помните, что это компиляция времени, а не исполнение времени выполнения.

  • 7
    Теперь я вижу это в документе, называемом утверждениями типа в разделе 4.13.
  • 2
    Это не работает в режиме JSX. Очень грустный.
Показать ещё 3 комментария
83

Это называется type assertion в TypeScript, а с TypeScript 1.6 есть два способа выразить это:

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

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

Обе альтернативы функционально идентичны. Причиной введения as -syntax является то, что исходный синтаксис противоречил JSX, см. Обсуждение дизайна здесь.

Если вы в состоянии выбрать, просто используйте синтаксис, с которым вам будет комфортно. Я лично предпочитаю as -syntax, поскольку он чувствует себя более свободно читать и писать.

  • 1
    Как вы указываете для машинописи, что вы преобразовали объект в другой тип? Например, func, который возвращает type2, внутри него он получает http 1, выполняет ли логика преобразование и возвращает то, что было type1, но теперь type2?
  • 0
    @TonyGutierrez Как вы делаете преобразование?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню