我正在使用 JSONata 从 JSON 构建 TypeScript OO 模型。
驱动因素之一是拥有 JSON 的完全类型化的对象模型表示。
如果我$merge([...])
在从源 JSON 映射到对象模型时使用,instanceof
则不会保留信息。
也许用一个例子更好地说明: -
考虑一个注册函数myFactory
来创建一个对象的实例:
function myFactory() : Person {
return new Person();
}
如果我只是使用工厂,像这样:
{
person: $myFactory()
}
然后result.person instanceof Person
就是true
。
但是,如果我使用$merge([..])
类型信息丢失:
{
person: $merge([$myFactory(), source.someAttributes])
}
然后result.person instanceof Person
就是false
。
这似乎是这里造成的。
目前我正在通过将对象的所有属性传递给工厂函数来解决它,例如:
function myFactory(other : any) : Person {
return Object.assign(new Person(), other);
}
...
{
person: $myFactory(source.someAttributes)
}
有更好的选择吗?