typescript - 带有包罗万象的道具的可能递归对象的打字稿接口
问题描述
我正在尝试在打字稿中定义一个可选递归结构,如下所示:
interface SceneObject {
name: string
type: string
children?: SceneObject[]
[k: string]: object|string|Array<number>
}
但是 ts 抱怨我的children
对象,说:Property 'children' of type 'SceneObject[] | undefined' is not assignable to string index type 'string | object | number[]'
它似乎在最后children
的k
总括之间混淆了。我如何捕捉可能有children
道具的对象的这个概念,如果有,它必须是一个SceneObject[]
?
注意:如果我设为children
非可选,则编译正常。也许我需要的是某种方式来表明包罗万象的条款不能是“孩子”?
编辑:这是一个可行的解决方案:
interface SceneObjectCore {
name: string
type: string
children?: SceneObject[]
}
type SceneObject = SceneObjectCore & {
[k: string]: object|string|Array<number>
}
let a: SceneObject = {
name: "myname",
type: "mytype",
otherProp: [123],
children: [{
name: "name2",
type: "child"
}]
}
解决方案
这里有一个类似的问题:如何从类型中排除索引签名?
除了那里接受的答案外,我还要补充一点,您可以定义您的“catchall”以包含undefined
与您的定义匹配的内容children
:
[k: string]: object | string| Array<number>| undefined
推荐阅读
- django - DJANGO - 上传图片然后在模板上显示
- c# - 添加使用“IHttpContextAccessor”的辅助类应该是 Singlton 或 Scoped
- c++ - CMake链接动态库
- reactjs - TypeError:无法读取 react.js 中未定义的属性(读取“addEventListener”)
- python - 如何使用诗歌安装子模块的依赖项?
- javascript - 提升一个状态,以便我可以使用 onPress 对其进行修改
- oauth-2.0 - eBay API 错误:授权引发以下错误....无效授权,无效客户端
- ios - 在 Go Server 中为 IOS 生成订阅报价签名时出现问题
- r - 错误:“matlib”的包或命名空间加载失败
- terraform - 如何使用 Terraform Cloud 中设置的环境变量?