打字稿 - 联合类型不起作用函数返回



我有一个接口一个枚举和一个类型:

export interface Filters {
  cat: Array<string>;
  statuses: Array<Status | TopStatus>;
}
export enum Status {
  ARCHIVED,
  IN_PROGRESS,
  COMING
}
export type TopStatus = Status.ARCHIVED | Status.IN_PROGRESS;

在方法中:

  handleStatuses(myFilters: Filters): Array<string | TopStatus> {
    return [...myFilters.cat, ...myFilters.statuses];
  }

我有错误2322谁说他正在等待string | ARCHIVED | IN_PROGRESS | COMING而方法返回string ARCHIVED | IN_PROGRESS

但是当该方法返回到数组时它有效

扩展myFilters.statuses将导致扩展Array<Status | TopStatus>,因此从此函数返回的值将返回类型 Array<string | Status | TopStatus> 而不是手动声明的 Array<string | TopStatus> 。这显然是绝对正确的,一切都在按设计工作:)

如果您确定函数内部的myFilters.statuses仅包含TopFilter,则可以强制重新键入:

handleStatuses(myFilters: Filters): Array<string | TopStatus> {
    return [...myFilters.cat, ...(myFilters.statuses as Array<TopStatus>)];
}

或者以正确的方式重新声明函数的返回类型:

handleStatuses(myFilters: Filters): Array<string | Status | TopStatus> {
    return [...myFilters.cat, ...myFilters.statuses];
}

在操场上运行该代码会得到:

Type '(string | Status)[]' is not assignable to type '(string | Status.ARCHIVED | Status.IN_PROGRESS)[]'.
  Type 'string | Status' is not assignable to type 'string | Status.ARCHIVED | Status.IN_PROGRESS'.
    Type 'Status.COMING' is not assignable to type 'string | Status.ARCHIVED | Status.IN_PROGRESS'.

具体说来:

类型">

状态.来"不可分配给类型"字符串 |状态.存档 |Status.IN_PROGRESS'。

您正在尝试将枚举分配给仅接受其值子集的类型。

最新更新