我正在尝试在打字稿中实现态射/ DTO映射概念。
为简要介绍态射的概念,态射是指从一种数学结构到另一种数学结构的保留结构的映射。 源X为目标Y的态射f记为f:X→Y。
有关https://en.wikipedia.org/wiki/Morphism的更多信息
我正在尝试使用态射StrictSchema以通用方式对复杂类型对象(即包含另一个对象和对象数组的对象)进行源到目标的映射。请参考下面提供的链接,以获取有关morphism npm软件包的更多信息。 https://github.com/nobrainr/morphism
我的界面
interface IFoo {
keyA: {
key1: number,
key2: number,
key3: [
{
key3A: string,
key3B: number
}
],
key4: string
},
keyB: string,
keyC: number,
keyD: {
key1: string,
key2: {
key2A: string
},
key3: string
},
keyE: string
}
const schema: StrictSchema<IFoo> =
{ keyA: {
key1: 'somepath',
key2: 'somepath',
key3: [
{
key3A: 'somepath',
key3B: 'somepath'
}
],
key4: 'somepath'
},
keyB: 'somepath',
keyC: 'somepath',
keyD: {
key1: 'somepath',
key2: {
key2A: 'somepath'
},
key3: 'somepath'
},
keyE: 'somepath'
};
const target = morphism(schema, someSourceObject);
在这里,模式是我的界面的保留对象的映射。我为每个键添加了“ somepath”作为值,并将其替换为来自实际源对象的一些实际路径。 但是这样做的同时,我得到: 错误:期望的类型来自属性'keyA',该属性在此处声明为'StrictSchema
因此,首先,我可以使用态射来保留上述场景中的映射,因为我还没有遇到使用'ScrictSchema'的任何此类示例。如果是,那怎么办?
答案 0 :(得分:2)
您可以尝试使用嵌套接口或复杂的接口签名为严格的架构实现接口。
这是有关如何实现相同效果的StackOverflow链接:Typescript: How do I define interfaces for nested objects?
或者,您可以对域使用不同的npm包,以在Typescript中对映射进行建模,例如为Typescript(https://github.com/loedeman/AutoMapper)使用Automapper
答案 1 :(得分:1)
只需跟进该请求即可。除了在较小的模式中分解接口的建议之外,我还实现了从模式创建复杂对象的功能。在Morphism: 1.9.1
的最新版本中可用