假设我有一些C# DTO,我希望使用T4模板和名为TypeLite的整洁小库将它们转换为TypeScript接口
在客户端,我有一些具体的TypeScript类(这些类继承自Backbone.Model,但这并不重要),它们表示服务器端定义的相同的DTO。
接口的预期目标是充当数据契约,并确保客户机和服务器DTO保持同步。
但是,这是有问题的,因为TypeScript不支持instanceof以外的运行时类型检查工具。当我从服务器获取DTO时,存在的问题是它们是普通的JSON对象,而不是模型的实例。我需要对这些从服务器作为JSON对象进入的DTO执行运行时类型检查。
我知道我可以这样做:
collection.fetch({...}).done((baseModels) => {
baseModels.forEach((baseModel) => {
if(baseModel&& baseModel.SomeProperty && baseModel.SomeOtherProperty){
//JSON model has been "type-checked"
}
});
});但是,这方面存在明显的问题,因为如果更改或添加属性,现在需要在三个位置进行更新。
目前我发现的唯一一件事是这,但是它是没有文档的,没有维护,并且使用我没有经验的节点,所以我可以避免沮丧。有没有人知道类似于在TypeScript中执行运行时类型检查,或者其他方式来完成我想要的?
如果将其内置到TypeLite中以生成接口以及运行时类型检查的JSON模式,那就太好了。既然这个项目是开源,那么就应该有人去扩展它。我至少需要一些指点,如果我自己去做的话(这就是问题)。
关于我的特定问题这里的更多细节(没有必要,但如果需要额外的上下文)
发布于 2013-04-03 06:00:42
在运行时,您使用的是普通JavaScript,因此您可以使用这个答案,因为它与普通JavaScript相关:
下面是一个TypeScript get类名实现,它可以提供封闭的TypeScript类的名称(该链接还有这个示例的静态独立版本)。
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());这不会给您提供有关继承链的数据,只提供您正在检查的类。
https://stackoverflow.com/questions/15775092
复制相似问题