首页 > 解决方案 > 关于不兼容类型的 Typescript 编译器错误

问题描述

我正在使用在 Node 10 上运行的 Typescript 3.9.7 编写的 API。我已经删除了不必要的细节,但我基本上是在执行以下操作:

  1. 从数据库中提取用户数据。
  2. 为每个用户对象添加一个“状态”字段
  3. 将数据发送到 UI。

我正在尝试使用接口来添加一些类型安全性,但我似乎在滥用它们,因为 TS 编译器给了我一些错误。有关如何解决此问题的建议会有所帮助。

我已经删除了其他细节,但这是我获取用户数据并添加状态字段的方法:

public async getUsers(
        parameter: string
    ): Promise<AugmentedUser[]> { 
    //return an array of User objects based on some parameter
    const userData = await this.userService.getAll<User>(parameter); 
    
    
    return userData.forEach((userRow: User) => {
           userRow.state = "inactive";
    });
}

我的界面是

export interface User {
    id: number;
    firstName: string;
    //some other fields
}

export interface AugmentedUser extends User {
    state: string;
}

我从编译器收到以下错误:

error TS2322: Type 'UserData[]' is not assignable to type 'AugmentedUser[]'. Property 'state' is missing in type 'User' but required in type 'AugmentedUser'.

我究竟做错了什么?我state在循环中添加了该字段,forEach为什么会出现此错误?谢谢。

标签: node.jstypescriptcompiler-errors

解决方案


forEach 不返回任何内容。试试地图功能:

return userData.map((userRow: User) => {
  return {...userRow, state: 'inactive'};
});

这将生成一个对象列表,其中包含所有用户属性以及 AugmentedUser 中存在的状态。


推荐阅读