我正在使用(我认为)“索引访问参数”来写入我的reducer中的对象:
export type SettingsState = {
brainRadiusEstimate: number,
displayProgressIndicator: boolean,
respiratoryFilterUpperBound: string,
patientFeedback: PatientFeedbackType,
connectionStatus: ConnectionStatus,
brainSize: BrainSize,
version: 'BETA 2',
}
export type ChangeParameterAction = {
type: 'CHANGE_PARAMETER',
parameter: ParameterName,
value: any
}
export default function settingsReducer(state: SettingsState = defaultState, action: ChangeParameterAction): SettingsState {
switch (action.type) {
case 'CHANGE_PARAMETER':
const newState: SettingsState = { ...state };
newState[action.parameter] = action.value;
return newState;
default:
return state;
}
}
我在newState[action.parameter] = action.value
上遇到错误,提示“类型'any'不能分配给类型'从不'”。
我看到here(在“修复对索引访问类型的不正确写入中”)下,这确实是TypeScript所期望的。它说解决方案是“如果您确信自己没有在处理错误,则可以改用类型断言。”
我尝试添加
type ValueTypes = number | string | boolean | null | PatientFeedbackType | ConnectionStatus | BrainSize | 'BETA 2
并将行更改为
newState[action.parameter] = action.value as ValueTypes;
以及
const value: ValueTypes = action.value
newState[action.parameter] = value;
但是我遇到了相同的错误,只是使用了无法分配为Never的不同类型。
是否可以简单地使用@ts-ignore
来进行此参数访问?
答案 0 :(得分:1)
您的类型上没有index signature。但!没关系,因为还有另一种方法可以给这只猫换皮:计算所得的属性名称:
const newState: SettingsState = { ...state, [action.parameter]: action.value };
根据ParameterName
的定义,可以解决此问题。例如,如果ParameterName
为keyof SettingsState
,它将为
Live on the playground(使用type ParameterName = keyof SettingsState;
)
答案 1 :(得分:0)
在我的情况下,错误:
类型'any'不能分配给类型'从不
仅是由于数组未正确声明(具有特定类型)引起的。因此,我通过更改其声明来解决它,例如来自:
myArray: [];
收件人:
myArray: any[];