打字稿用TypeLite - 运行时类型检查(Typescript with TypeLite -

2019-08-19 03:52发布

比方说,我有一些C#DTO的,我想将它们转换使用T4模板和整洁的小库调用打字稿接口TypeLite

在客户端,我有代表在服务器端定义相同的DTO一些具体的打字稿类(即从Backbone.Model继承,但是这并不重要)。

接口的预期目标是充当数据合同,并保证客户端和服务器的DTO保持同步。

然而,这是有问题的,因为打字稿支持比其他没有运行时类型检查设施instanceof 。 与实例的问题是,当我从服务器获取我的DTO它们都是普通的JSON对象,而不是我的模型的实例。 我需要在这些DTO的从服务器作为JSON对象进来执行运行时类型检查。

我知道我可以做这样的事情:

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

然而,这个明显的问题,因为现在我需要在三个地方进行更新,如果我更改或添加的属性。

目前我发现的唯一的事情就是这样 ,但它没有证件,不能维持,并使用它我有,所以我会拯救自己的无奈零经验节点。 有谁知道任何东西类似于打字稿或其他方式执行运行时类型检查来完成我后?

如果这被内置到TypeLite生成接口以及类型在运行时检查JSON模式这将是巨大的。 作为这个项目是开源的人真的应该继续并扩展它。 我需要在至少一些指针,如果我会做我自己(这样的问题)。

我的具体问题的更多细节在这里 (不是必要的,但如果需要额外的上下文)

Answer 1:

在运行时使用的是普通的JavaScript,所以因为它涉及到普通的JavaScript,你可以使用这样的回答:

我如何在JavaScript对象的类型的名称?

这里是一个打字稿获取类名的实现 ,可以提供封闭打字稿类的名称(链接也有这个例子的静态单独的版本)。

class ShoutMyName {
    getName() { 
        var funcNameRegex = /function (.{1,})\(/;
        var anyThis = <any> this;
        var results = (funcNameRegex).exec(anyThis.constructor.toString());
        return (results && results.length > 1) ? results[1] : "";
    }
}

class Example extends ShoutMyName {
}

class AnotherClass extends ShoutMyName {
}

var x = new Example();
var y = new AnotherClass();

alert(x.getName());
alert(y.getName());

这不会给你的数据对继承链,只是你正在检查的类。



文章来源: Typescript with TypeLite - Run time type checking