【问题标题】:Map list with different types of object but similar attributes具有不同类型对象但属性相似的映射列表
【发布时间】:2021-04-19 06:30:05
【问题描述】:

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

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

【问题讨论】:

  • 也许构建一个列出相似属性的界面?然后构建一个映射该数组的列表? (并使对象继承自接口)
  • 请创建一个minimal reproducible example 以显示错误消息的问题。你可以用typescript playground做这样的例子

标签: arrays angular typescript casting


【解决方案1】:

我想你可能想要

Array&lt;FilterStatus | CaseDefinition&gt;

而不是

Array&lt;FilterStatus&gt; | Array&lt;CaseDefinition&gt;

第一个是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 }));
}

【讨论】:

  • 是的!谢谢!
猜你喜欢
  • 2017-04-04
  • 2016-10-13
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
  • 2010-10-18
  • 2023-03-25
  • 2014-08-13
相关资源
最近更新 更多