我正在使用(我认为)“索引访问参数”来写入我的减速器中的对象:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我收到一条错误newState[action.parameter] = action.value消息“类型‘any’不可分配给类型‘never’”。
我在这里(在“对索引访问类型的不健全写入的修复”下)看到,这确实是 TypeScript 中所期望的。它说解决方案是“如果您确信自己没有处理错误,则可以使用类型断言”。
我尝试过添加
type ValueTypes = number | string | boolean | null | PatientFeedbackType | ConnectionStatus | BrainSize | 'BETA 2
Run Code Online (Sandbox Code Playgroud)
并将该行更改为
newState[action.parameter] = action.value as ValueTypes;
Run Code Online (Sandbox Code Playgroud)
也
const value: ValueTypes = action.value
newState[action.parameter] = value;
Run Code Online (Sandbox Code Playgroud)
但我得到了同样的错误,只是使用了不能分配给 never 的不同类型。
有没有一种方法可以在不简单使用的情况下进行此参数访问@ts-ignore?
CPH*_*hon 12
就我而言,错误是:
类型“any”不可分配给类型“never”
仅仅是由于未正确声明的数组(具有特定类型)引起的。因此,我通过更改其声明来解决它,例如:
myArray: [];
Run Code Online (Sandbox Code Playgroud)
到:
myArray: any[];
Run Code Online (Sandbox Code Playgroud)
T.J*_*der 10
您没有该类型的索引签名。但!没关系,因为还有另一种方法可以给这只猫剥皮:计算属性名称:
const newState: SettingsState = { ...state, [action.parameter]: action.value };
Run Code Online (Sandbox Code Playgroud)
根据 的定义ParameterName,这应该可以纠正问题。例如,如果ParameterName是keyof SettingsState,它就会。
住在操场上(使用type ParameterName = keyof SettingsState;)
| 归档时间: |
|
| 查看次数: |
40931 次 |
| 最近记录: |