如果您能提出以下方法的正确键入方式,我将不胜感激:
interface TestT {
[index: string]: any
}
function _defaultUpdateStateMutation<T extends TestT> (
state: T,
options: {
value: Object,
valueName: string
}
) {
const { value, valueName } = options
// TS2536: Type 'string' cannot be used to index type 'T'.
if (valueName) {
state[valueName] = value
} else if (value) {
Object.keys(value).forEach(valueName => {
state[valueName] = value[valueName]
})
}
}
TypeScript游乐场。
您必须告诉ts
编译器valueName
是T:的密钥
并将Object.keys(value)
转换为Array<keyof T>
function _defaultUpdateStateMutation<T extends TestT> (
state: T,
options: {
value: any,
valueName: keyof T
}
) {
const { value, valueName } = options
if (valueName) {
state[valueName] = value
} else if (value) {
(Object.keys(value) as Array<keyof T>).forEach(valueName => {
state[valueName] = value[valueName]
})
}
}
PlayGroundLink