我有一个接口一个枚举和一个类型:
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'。
您正在尝试将枚举分配给仅接受其值子集的类型。