typescript 使用union允许多个类型的参数时的类型脚本问题

ulydmbyx  于 2023-03-31  发布在  TypeScript
关注(0)|答案(1)|浏览(113)

我有这些类型:

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 [];}|{ ...}|{...; }'具有签名,但这些签名彼此不兼容。`
我不确定这是否与我扩展接口的事实有关……有什么想法我做错了吗?

h4cxqtbf

h4cxqtbf1#

尝试:plans:〈PlansProps|FooPlansProps|BarPlansProps〉[]

相关问题