我有以下代码:
export const mapLayers: Record<string, SomeObject> = {
layer_a: {},
layer_b: {}
} as const;
export type LayerId = keyof typeof mapLayers;
LayerId
将永远是string
,而不是我所期望的layer_a | layer_b
。
如果我删除 Record<string, SomeObject>
部分,它实际上确实有效。但随后我就失去了限制 mapLayers
值的可能性。如何获得正确的推断键以及“有限”值?
听起来像是
satisifes
运算符的情况:
export const mapLayers = {
layer_a: {},
layer_b: {}
} satisfies Record<string, SomeObject>;
这告诉 typescript 它应该严格推断类型(类似于
as const
,但不创建属性 readonly
)。此外,它还告诉打字稿,如果结果与 Record<string, SomeObject>
不兼容,您希望发生错误
有关
satisfies
的更多信息,请参阅此文档页面