当我们为 React 应用程序使用 UseReducer 钩子方法时导出操作

Export actions when we use the UseReducer hook approach for React app

我有一个由 React hooks 构建的应用程序。 所以,在使用 userReducer 的情况下,我有特殊的操作文件 像这样

    export namespace PrepareReviewActions {
  export enum Types {
    TOGGLE_CONFIRMATION,
    TOGGLE_ALL_CHECKED,
    SET_EXCEPTION_TYPES,
    SET_ACTION_TYPE
  }

  export class ToggleConfirmation implements Action {
    public readonly type: Types.TOGGLE_CONFIRMATION;
    public constructor(public opened?: boolean) {}
  }

  export class ToggleAllChecked implements Action {
    public readonly type: Types.TOGGLE_ALL_CHECKED;
    public constructor(public checked?: boolean) {}
  }

  export class SetExceptionTypes implements Action {
    public readonly type: Types.SET_EXCEPTION_TYPES;
    public constructor(public exceptionTypes?: Array<string>) {}
  }

  export class SetActionTypes implements Action {
    public readonly type: Types.SET_ACTION_TYPE;
    public constructor(public actionType?: string) {}
  }

  export type All = ToggleConfirmation | ToggleAllChecked | SetExceptionTypes | SetActionTypes;
}

我关于这一行的问题export type All = ToggleConfirmation | ToggleAllChecked | SetExceptionTypes | SetActionTypes;

为什么 | (竖线)用于连接?

如果我使用 &(与号)有什么不同? 例如:

 export type All = ToggleConfirmation & ToggleAllChecked & SetExceptionTypes & SetActionTypes;
export type All = ToggleConfirmation | ToggleAllChecked | SetExceptionTypes | SetActionTypes;

这称为 联合类型,这意味着类型 All 可以具有在 |.[=14 之间声明的类型之一=]

文档:https://www.typescriptlang.org/docs/handbook/unions-and-intersections.html#union-types

 export type All = ToggleConfirmation & ToggleAllChecked & SetExceptionTypes & SetActionTypes;

这称为 Intersection Type,这意味着类型 All 必须具有在 & 之间声明的那些类型的所有成员。

文档:https://www.typescriptlang.org/docs/handbook/2/objects.html#intersection-types

在您的特定情况下,您最好使用联合类型,因为每次您只会向减速器发送一个操作。因此,您将使用 Union 类型 All 来告诉 reducer 它可以接收其中一种类型。