【发布时间】:2013-03-24 09:29:37
【问题描述】:
假设我有一些 C# DTO,我想使用 T4 模板和名为 TypeLite 的简洁小库将它们转换为 TypeScript 接口
在客户端,我有一些具体的 TypeScript 类(继承自 Backbone.Model,但这并不重要),它们代表在服务器端定义的相同 DTO。
接口的预期目标是充当数据合同并确保客户端和服务器 DTO 保持同步。
但是,这是有问题的,因为除了 instanceof,TypeScript 不支持任何运行时类型检查工具。实例的问题是当我从服务器获取我的 DTO 时,它们是纯 JSON 对象,而不是我的模型的实例。我需要对从服务器作为 JSON 对象传入的这些 DTO 执行运行时类型检查。
我知道我可以这样做:
collection.fetch({...}).done((baseModels) => {
baseModels.forEach((baseModel) => {
if(baseModel&& baseModel.SomeProperty && baseModel.SomeOtherProperty){
//JSON model has been "type-checked"
}
});
});
但是,这存在明显的问题,因为现在如果我更改或添加属性,我需要在 三个 位置进行更新。
目前我发现的唯一东西是this,但它没有记录,没有维护,并且使用我零经验的节点,所以我会为自己省去挫败感。有没有人知道类似在 TypeScript 中执行运行时类型检查或其他方式来完成我所追求的事情?
如果它内置在 TypeLite 中以生成接口以及用于在运行时进行类型检查的 JSON 模式,那就太好了。因为这个项目是open source,所以真的应该有人继续扩展它。如果我自己做的话,我至少需要一些指示(因此是问题)。
关于我的特定问题here 的更多详细信息(不是必需的,但如果需要额外的上下文)
【问题讨论】:
-
保留一个属性
type并在其中保留一个类名字符串。 -
谢谢,这是我将做的临时解决方法,但这是有问题的,因为它不支持继承。也就是说,除非我为每种类型保留整个继承链的分隔列表,但这变得难以维护,尤其是因为我的 C# 类已转换为 TS 接口,因此分配给属性的值将在转换过程中被删除。跨度>
-
首先,是的,就是这样。第二,如果你的核心数据模型有很深的嵌套继承关系,那就是问题的根源。不要使用继承或限制它。
标签: json typescript typelite