类型“any”不可分配给类型“never”

Jon*_*man 10 typescript redux

我正在使用(我认为)“索引访问参数”来写入我的减速器中的对象:

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,这应该可以纠正问题。例如,如果ParameterNamekeyof SettingsState,它就会。

住在操场上(使用type ParameterName = keyof SettingsState;