【发布时间】:2019-08-21 07:50:01
【问题描述】:
我有一个类型试图描述一个可序列化的深层嵌套“纯 javascript”对象:
export interface MappingReferenceValues {
/** The reference values */
[key: string]:
| string
| number
| boolean
| MappingReferenceValues
| string[]
| number[]
| boolean[]
| MappingReferenceValues[];
}
它让我可以定义数字、字符串、布尔值或它们的数组的简单深层嵌套键值对:
const thing: MappingReferenceValues = {
test: {
test2: {
test3: "hi",
test4: 200,
test5: [true, false]
}
}
};
太棒了!可以很好地声明它。它比any 好得多,因为它确保我没有函数,而且它与undefined 不同。
但是,使用起来真的很痛苦:
const output = thing.test.test2.test3
出现错误:
Property 'test2' does not exist on type 'string | number | boolean | MappingReferenceValues | string[] | number[] | boolean[] | MappingReferenceValues[]'.
Property 'test2' does not exist on type 'string'.
test2 不存在于字符串类型上,但它存在于类型 MappingReferenceValues 上。有什么办法可以解决这个问题,而无需再次将其投射到任何地方?
【问题讨论】:
标签: typescript