typescript使用嵌套结构动态创建接口

typescript使用嵌套结构动态创建接口,typescript,dynamic,types,type-inference,Typescript,Dynamic,Types,Type Inference,关于如何动态创建接口,@jcalz给出了一个很好的答案: 但是,我想知道我们是否可以对嵌套结构执行相同的操作,并集成一个可选参数,请参见下面的? 来自 {"names": {"firstName": "string", "lastName": "?string"} , "age": "number" } 输出 {name: {firstName: string, lastName?: string}, age: number} 根据他的回答,你可以定义自己的类型。所以你也可以在这里定义“?s

关于如何动态创建接口,@jcalz给出了一个很好的答案:

但是,我想知道我们是否可以对嵌套结构执行相同的操作,并集成一个可选参数,请参见下面的

来自

{"names": {"firstName": "string", "lastName": "?string"} , "age": "number" }
输出

{name: {firstName: string, lastName?: string}, age: number}

根据他的回答,你可以定义自己的类型。所以你也可以在这里定义“?string”。但是我想它仍然需要使用
string
undefined
的值来指定属性

类型MapSchemaTypes={
字符串:字符串;
整数:数字;
“?字符串”:字符串|未定义;
}
我是这样做的:

const模式={
“姓名”:{
“firstName”:“string”,
“lastName”:“字符串”
},
“年龄”:“数字”,
“名称”:“字符串”,
“lastName”:“字符串”,
}作为常量;
类型筛选器_PROPS={
[Key in keyof Base]:Base[Key]扩展条件?Key:从不;
}[基地的钥匙];
类型模式={
[K在过滤道具中]?:
T[K]扩展了“?number”?number
:T[K]扩展“?字符串”?字符串
:从不
} & {
[K在过滤道具中]:
T[K]扩展了“number”?number
:T[K]扩展“字符串”?字符串
:T[K]扩展{}模式
:从不
};
常数a:模式={
姓名:{
名字:'测试',
},
名称:“必需”,
年龄:123,
};