我有这些类型:
export interface PlansProps {
identifier: string;
bundleType: BUNDLE_TYPES;
extraPeriod: PeriodProps;
period: PeriodProps;
price: PriceProps;
children: Array<ChildrenProps>;
}
export interface FooPlansProps extends Omit<PlansProps, 'bundleType' | 'children'> {
isIntroductory: boolean;
subgroup: string;
}
export interface BarPlansProps extends Omit<FooPlansProps, 'subgroup'> {
quotaStorageSize: string;
}
我有这个功能:
export const getAllIdentifiersByPeriod = (
plans: PlansProps[],
periodIdentifier: PERIOD_IDENTIFIER
): PlansProps[] =>
plans.filter(({ period }) => period.identifier === periodIdentifier);
我想扩展这个函数的用法,让它也接受FooPlansProps[]
或BarPlansProps
类型的计划,为此,我使用了union运算符,所以:
export const getAllIdentifiersByPeriod = (
plans: PlansProps[] | FooPlansProps[] | BarPlansProps[],
periodIdentifier: PERIOD_IDENTIFIER
): PlansProps[] | FooPlansProps[] | BarPlansProps[] => {
return plans.filter(({ period }) => period.identifier === periodIdentifier);
};
但是当我这样做时,TS会在plans.filter和period上抱怨:
此表达式不可调用。联合类型“{( predicate :(value:PlansProps,index:编号,数组:PlansProps[])=〉value is S,thisArg?:any):S[];(predicate:(value:PlansProps,index:编号,数组:PlansProps[])=〉unknown,thisArg?:int [];}|{ ...}|{...; }'具有签名,但这些签名彼此不兼容。`
我不确定这是否与我扩展接口的事实有关……有什么想法我做错了吗?
1条答案
按热度按时间h4cxqtbf1#
尝试:plans:〈PlansProps|FooPlansProps|BarPlansProps〉[]