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'.