我正在尝试为某些常规状态更新创建一个redux动作,并想知道是否可以使类型适用于括号表示法:
interface IThing {
someProp: string;
otherProp: boolean;
}
const state = {
thing: {
someProp: 'prop',
otherProp: true,
} as IThing
}
const action = { name: 'someProp' as keyof IThing, value: 'someValue' as any }
// gives typescript error: Type 'any' is not assignable to type 'never'
state.thing[action.name] = action.value;
答案 0 :(得分:1)
这里的问题是,如果要通过动态属性名称分配值,则需要将右侧的值分配给您可能命名的任何属性。在这种情况下,这意味着它必须同时可分配给string
和boolean
,这意味着它必须为never
类型(因为这两种类型没有通用值)。
解决方案是使用泛型类型,以便您可以将属性名称约束为K
类型,并且分配的值可以为IThing[K]
类型,而不一定是{{ 1}}。这是一个示例:
never