Datilografado com TypeLite - Verificação do tipo de tempo de execução

Vamos dizer que eu tenho alguns CTO DTO e eu quero convertê-los para interfaces TypeScript usando modelos T4 e pequena biblioteca chamadaTypeLite

No lado do cliente, tenho algumas classes TypeScript concretas (que herdam de Backbone.Model, mas isso não é importante) que representam o mesmo DTO definido no lado do servidor.

O objetivo pretendido das interfaces é atuar como contratos de dados e garantir que os DTOs do cliente e do servidor sejam mantidos em sincronia.

No entanto, isso é problemático, pois o TypeScript não oferece suporte a nenhum recurso de verificação de tipo em tempo de execuçãoinstanceof. O problema com a instância é quando eu busco meus DTOs do servidor, eles são objetos JSON simples e não instâncias do meu modelo. Eu preciso executar a verificação do tipo de tempo de execução nesses DTOs que chegam do servidor como objetos JSON.

Eu sei que posso fazer algo assim:

collection.fetch({...}).done((baseModels) => {
     baseModels.forEach((baseModel) => {
           if(baseModel&& baseModel.SomeProperty && baseModel.SomeOtherProperty){
                //JSON model has been "type-checked"
           }
     });
});

No entanto, há problemas óbvios para isso, porque agora eu preciso atualizar emtrês lugares se eu mudar ou adicionar uma propriedade.

Atualmente, a única coisa que encontrei éisto mas não é documentado, não é mantido e usa o nó com o qual eu tenho zero experiência, então vou me poupar da frustração. Alguém sabe de algo semelhante para executar a verificação do tipo de tempo de execução no TypeScript ou alguma outra maneira de realizar o que eu estou procurando?

Seria ótimo se isso fosse incorporado ao TypeLite para gerar as interfaces, bem como um esquema JSON para verificação de tipo em tempo de execução. Sendo que este projeto éCódigo aberto alguém deveria realmente ir em frente e estendê-lo. Eu precisaria de alguns ponteiros, pelo menos, se eu fizesse isso sozinho (assim a pergunta).

Mais detalhes sobre meu problema particularAqui (não é necessário, mas se necessário, contexto extra)

questionAnswers(1)

yourAnswerToTheQuestion