TypeScript-联合类型不工作函数返回

TypeScript-联合类型不工作函数返回,typescript,Typescript,我有一个接口,一个枚举和一个类型: 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; 导出接口过滤

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

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;
导出接口过滤器{
cat:阵列;
状态:数组;
}
导出枚举状态{
存档,
正在进行中,
即将到来
}
导出类型TopStatus=Status.ARCHIVED | Status.IN_PROGRESS;
在方法中:

  handleStatuses(myFilters: Filters): Array<string | TopStatus> {
    return [...myFilters.cat, ...myFilters.statuses];
  }
handlestates(myFilters:Filters):数组{
返回[…myFilters.cat,…myFilters.status];
}
我有一个错误
2322
,他说他正在等待
string |归档|进行中|
而方法返回
string归档|进行中

但当该方法返回到数组`

运行时,它会起作用,该数组将给出:

具体而言:

类型“Status.COMING”不可分配给类型“string | Status.ARCHIVED | Status.IN | PROGRESS”


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

扩展
myFilters。状态
将导致扩展
数组
,因此从该函数返回的值将返回类型
数组
,而不是手动声明的
数组
。这显然是绝对正确的,一切都按设计进行:)

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

handlestates(myFilters:Filters):数组{
返回[…myFilters.cat,…(myFilters.status作为数组)];
}
或以正确的方式重新声明函数的返回类型:

handlestates(myFilters:Filters):数组{
返回[…myFilters.cat,…myFilters.status];
}

我想这里可能有一些东西,但是
…myFilters.Status
应该是
数组类型,但是在函数中,您希望它只返回
TopStatus
位,而不在函数体中处理它。您可以将类型
return[…myFilters.cat,…myFilters.status]转换为[string[],TopStatus[]
,但这样一来,您的方法将很容易出现编译器无法再警告您的错误。
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'.