typescript - 打字稿:为对象的多个动态对象定义类型并附加静态对象
问题描述
我有一个这样的对象:
{
mainObject:{
object1:{
data1:val,
data2:val,
data3:val
},
object2:{
data1:val,
data2:val,
data3:val
},
object3:{
data1:val,
data2:val,
data3:val
},
order:{
0: object3,
1: object2,
2: object1
},
positions:{
prev:{
data1:val,
data2:val,
data3:val
}
}
}
}
需要注意的地方是:
- mainObject 是一个对象而不是数组。
- 这些键 object1、object2 和 object3 是动态的,它们可以是任何东西和任何限制(可以超过 3 或更少)。
- 键顺序,位置是固定键,它们将始终与数据一起提供。
现在我的问题是:
- 我们将如何定义这种结构的类型,其中我们在 object 中有对象并且这些对象的键是动态的。
- 我们将如何将这两个静态对象附加到那些动态设置的对象中。
我已经设置的一些类型是:
interface ObjectVals {
data1: string;
data2: string;
data3: string;
}
interface DynamicKeyVals {
[key: string]: ObjectVals;
}
我查看了许多答案和文档,但没有得到任何相关的解决方案。有人可以帮我吗?
解决方案
您可以尝试以下方法:
export type OrderType = {
[T: number]: string
}
export type PositionType = {
prev: {
[T: string]: string
}
}
export type CommonObjectType = {
[T: string]: string
}
export type MainObjectStatic = {
order: OrderType
position: PositionType
}
export type MainObjectDynamic = {
[T in string]: CommonObjectType
}
export type MainObject = MainObjectStatic | MainObjectDynamic
interface Wrapper {
mainObject: MainObject
}
const a: Wrapper = {
mainObject: {
order: {
1: "something"
},
position: {
prev: {
"data1": "value"
}
},
object1: {
value1: "value"
},
alma: {
foo: "2"
}
},
}
但是,您可能会遇到问题 - 它只允许您实现 MainObjectStatic 或 MainObjectDynamic。
另一方面,如果您更改为export type MainObject = MainObjectStatic | MainObjectDynamic
它会指出和之间的类型不position
兼容MainObjectDynamic
我认为在同一级别混合静态和动态类型总是有问题的——如果可以的话,你应该重新组织结构
推荐阅读
- javascript - HTML textarea 行数
- python - 打印字符串与添加到列表不同,为什么?
- python - 做什么
在函数名中是什么意思? - java - 密钥库操作失败:填充模式不兼容
- javascript - 共享后端和前端输入验证或模块
- c - C中的免费未初始化指针
- c# - Json 反序列化 - 如何将剩余项目添加到字典中?
- python - Keras Lambda 层给出 ValueError: Input 0 is incompatible with layer xxx: expected min_ndim=3, found ndim=2
- python - 使用 python 请求库时出现“socket.timeout:超时”错误
- node.js - 在 MEAN 堆栈应用程序中无法获取/错误