【问题标题】:typescript fix error argument of type is not assignable打字稿修复错误类型的参数不可分配
【发布时间】:2019-12-02 01:03:18
【问题描述】:

我不知道为什么我会遇到问题。我有一个接受对象数组的函数。每个对象都有一个名为id 的属性,我想从给定数据中获取最后一个id。代码运行良好。

type Data = object;

const data = [
    {
        'id': 1,
        'name': 'Uncategorized',
    },
    {
        'id': 2,
        'name': 'DSLR Cameras',
    },
    {
        'id': 3,
        'name': 'Printer / Ink',
    },
];

const getLastId = (data: Data[]): number => {
    if (Array.isArray(data) && data.length > 0) {
        // Create an array of Id's of all items
        const idsArray: number[] = [];
        data.forEach((obj: { id: number }) => idsArray.push(obj.id));
        // Return last element id
        return idsArray[data.length - 1];
    } else {
        return 1;
    }
};

但是,在下一行,出现了一个错误。

data.forEach((obj: { id: number }) => idsArray.push(obj.id));

TS2345: Argument of type '(obj: { id: number; }) => number' is not assignable to parameter of type '(value: object, index: number, array: object[]) => void'.
  Types of parameters 'obj' and 'value' are incompatible.
    Property 'id' is missing in type '{}' but required in type '{ id: number; }'.

这是什么类型的错误以及如何解决? Link

【问题讨论】:

  • 我无法重现这个错误,你能创建一个在线可运行的例子吗?
  • @KamilNaja link
  • 你应该只将 obj 作为参数传递给 forEach 回调

标签: typescript


【解决方案1】:

你的数据(我不喜欢这个名字)声明是对象,但应该是这样的:

type Data = {
    id: number,
    name: string,
};

【讨论】:

  • 但是现在Data 对于具有idname 属性的特定数据形式是静态的。但是,如果我有另一种形式的数据,它具有id 属性以及addresscityzipcode,那么我必须为该数据声明另一种自定义类型。我的意思是这就是为什么我声明一个参数,该参数将采用任何对象的数组。
  • 如果只想要id,可以使用:type Data = { id: number, };
  • 您可以通过执行 Data["adress"] 向 Data 添加属性
猜你喜欢
  • 1970-01-01
  • 2018-06-13
  • 2017-04-23
  • 2018-06-19
  • 1970-01-01
  • 1970-01-01
  • 2018-03-21
  • 2018-02-02
  • 2021-06-17
相关资源
最近更新 更多