首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有TypeLite运行时类型检查的类型记录

带有TypeLite运行时类型检查的类型记录
EN

Stack Overflow用户
提问于 2013-04-02 21:51:11
回答 1查看 2K关注 0票数 4

假设我有一些C# DTO,我希望使用T4模板和名为TypeLite的整洁小库将它们转换为TypeScript接口

在客户端,我有一些具体的TypeScript类(这些类继承自Backbone.Model,但这并不重要),它们表示服务器端定义的相同的DTO。

接口的预期目标是充当数据契约,并确保客户机和服务器DTO保持同步。

但是,这是有问题的,因为TypeScript不支持instanceof以外的运行时类型检查工具。当我从服务器获取DTO时,存在的问题是它们是普通的JSON对象,而不是模型的实例。我需要对这些从服务器作为JSON对象进入的DTO执行运行时类型检查。

我知道我可以这样做:

代码语言:javascript
复制
collection.fetch({...}).done((baseModels) => {
     baseModels.forEach((baseModel) => {
           if(baseModel&& baseModel.SomeProperty && baseModel.SomeOtherProperty){
                //JSON model has been "type-checked"
           }
     });
});

但是,这方面存在明显的问题,因为如果更改或添加属性,现在需要在三个位置进行更新。

目前我发现的唯一一件事是,但是它是没有文档的,没有维护,并且使用我没有经验的节点,所以我可以避免沮丧。有没有人知道类似于在TypeScript中执行运行时类型检查,或者其他方式来完成我想要的?

如果将其内置到TypeLite中以生成接口以及运行时类型检查的JSON模式,那就太好了。既然这个项目是开源,那么就应该有人去扩展它。我至少需要一些指点,如果我自己去做的话(这就是问题)。

关于我的特定问题这里的更多细节(没有必要,但如果需要额外的上下文)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-03 06:00:42

在运行时,您使用的是普通JavaScript,因此您可以使用这个答案,因为它与普通JavaScript相关:

如何在JavaScript中获取对象类型的名称?

下面是一个TypeScript get类名实现,它可以提供封闭的TypeScript类的名称(该链接还有这个示例的静态独立版本)。

代码语言: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());

这不会给您提供有关继承链的数据,只提供您正在检查的类。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15775092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档