You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript报错:User类型无法赋值给EntityTarget类型参数

问题说明

开发时向函数传入Entity类型参数,函数内部调用TypeORM的find方法触发类型报错,相关代码与错误信息如下:

  1. 实体联合类型定义:
export type Entities = User | Blog | Service
  1. 业务函数实现:
import AppDataSource from '../database'
import { Entities } from '../entity/index'
import User from '../entity/User'

const getList = async (entity: Entities) => {
  const list = (await AppDataSource.manager.find(entity))
}
  1. 抛出的类型错误(中文翻译):

类型为Entities的参数无法赋值给EntityTarget类型的参数。类型User无法赋值给EntityTarget类型。

报错原因

类型定义出现概念混淆:当前声明的Entities是实体类的实例类型(即new User()生成的实例对象的类型),但AppDataSource.manager.find()要求传入的是EntityTarget类型,也就是实体类构造函数、表名字符串这类用于定位实体Schema的标识。实际调用时传入的是User/Blog/Service类本身,和声明的实例类型不匹配,因此触发类型校验错误。

修复方法

选择以下任意一种方案调整即可:

  • 方案1:修改联合类型为实体类构造器类型
    从TypeORM导入内置的ObjectType工具类型,重新定义Entities为实体类构造器的联合,匹配实际传参:
    import { ObjectType } from 'typeorm'
    import User from './User'
    import Blog from './Blog'
    import Service from './Service'
    
    export type Entities = ObjectType<User | Blog | Service>
    
    原业务函数不需要其他改动,类型即可正常匹配。
  • 方案2:直接使用TypeORM内置的EntityTarget类型作为参数类型
    如果后续需要兼容传入表名字符串等其他合法实体目标入参,可以直接用官方内置类型做参数声明,不需要额外定义联合类型:
    import { EntityTarget } from 'typeorm'
    import AppDataSource from '../database'
    import User from '../entity/User'
    import Blog from '../entity/Blog'
    import Service from '../entity/Service'
    
    const getList = async (entity: EntityTarget<User | Blog | Service>) => {
      const list = await AppDataSource.manager.find(entity)
    }
    

内容的提问来源于stack exchange,提问作者mrpoyraz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 03:18:27