首页 > 解决方案 > 具有不同类型对象但属性相似的映射列表

问题描述

我正在尝试使用具有相同属性但类型不同的对象映射列表:

doStuff(list: Array<FilterStatus> | Array<CaseDefinition>){
  list = list.map(value => ({...value, checked: true}));
}

我收到打字稿错误,我理解这是因为列表有不同的类型,但我不确定如何使它工作。任何提示?

: 无法调用类型缺少调用签名的表达式。类型 '((callbackfn: (value: FilterStatus, index: number, array: FilterStatus[]) => U, thisArg?: any) => U[]) | ((callbackfn: (value: CaseDefinition, index: number, array: CaseDefinition[]) => U, thisArg?: any) => U[])' 没有兼容的调用签名。

可重现的例子:

https://www.typescriptlang.org/play?#code/KYDwDg9gTgLgBASwHY2FAZgQwMbDgQTgG8AoOcuJTAW2AC44BnGKZAcwG4yLsALYbAGtgAEwYAjCBAA2wTEi4BfEiVCRYiFGiy44AIWLdyMBDFkNmrJJyNw+A4WLiSZchSWUlsEJMziYAGQRmBnwAbQBdOABeODCiKloGAHJE4GSAGjt+IVEGLGlGYEUIrm9feHEgkP1ImLiiEzN6OGSm2Uzshzy4AqKSrhV0AFckbBMfOBEIAGUYYfR0AAppYJhQqChMAE8AHnwAPjgAHwJNnd29A4BKQwo4Vb9Yx5gAOmpMMCWAN0xpYbw0SOSyIcFe4N+-2AWXsuScLABcEU12uSiAA

标签: arraysangulartypescriptcasting

解决方案


我想你可能想要

Array<FilterStatus | CaseDefinition>

代替

Array<FilterStatus> | Array<CaseDefinition>

第一个是 的数组FilterStatus or CaseDefinition,第二个是 的数组FilterStatus或数组CaseDefinition

完整示例:

export interface FilterStatus  {
    name: string;
    checked: boolean;
}

export interface CaseDefinition {
    title: string;
    checked: boolean;
}

const aList: FilterStatus[] = [{name: 'name', checked: false}];
const bList: CaseDefinition[] = [{title: 'title', checked: false}];


function doStuff(list: Array<FilterStatus | CaseDefinition >) {
    list = list.map(value => ({ ...value, checked: true }));
}

推荐阅读