【发布时间】:2021-08-28 01:18:43
【问题描述】:
这是一个工作示例来说明我的问题。
interface Definition {
oneTitle: string
oneDescription: string
twoTitle: string
twoDescription: string
}
const obj = {
oneTitle: 'Title 1',
oneDescription: 'Desc 1',
twoTitle: 'Title 2',
twoDescription: 'Desc 2'
}
type Keys = 'one' | 'two'
const keys: Keys[] = [
'one',
'two'
]
keys.forEach((key) => {
const {
[`${key}Title` as keyof Definition]: title,
[`${key}Description` as keyof Definition]: description,
} = obj
})
如您所见,有一个动态对象分解,例如。 [`${key}Title`]。我想知道在这种情况下,Typescript 中是否有一种方法可以避免为每个键定义多次 as keyof Definition?
我尝试了以下方法但没有成功。
const {
[`${key}Title`]: title,
[`${key}Description`]: description,
}: Record<keyof Definition, Definition> = config
const {
[`${key}Title`]: title,
[`${key}Description`]: description,
}: {[key in keyof Definition]: Definition} = config
确实,由于我在这两种情况下都遇到了错误has no matching index signature for type 'string,看来 Typescript 将动态键解释为字符串而不是定义类型的 keyof。
感谢您的帮助(:
【问题讨论】:
标签: typescript typescript-typings