【发布时间】:2021-02-25 06:53:17
【问题描述】:
我有一个如下格式的接口,它描述了这样的数据库方法:
export default interface IRepository {
createAndSave(data: ICreateUserDTO): Promise<User>
findById<T>({ id }: { id: number }): Promise<T | null> // right here
...
}
从上面的 sn-p 中可以看出,findById 方法旨在接受一个类型并返回一个已解析的 T 类型的承诺或空值。我继续在这样的类中实现它。
class DatabaseOps {
private ormManager: Repository<User>
...
async findById<User>({ id }: { id: number }): Promise<User | null> {
const t = await this.ormManager.findOne({
where: { id },
})
return t
}
...
}
当我尝试像这样创建 findById 方法时,打字稿会给出这种格式的错误
Type 'import("../src/user/infra/typeorm/entities/User").default' is not assignable to type 'User'.
'User' could be instantiated with an arbitrary type which could be unrelated to 'import("../src/audience/infra/typeorm/entities/User").default'
我尝试像这样使用 typescript 断言来覆盖这个错误
class DatabaseOps {
private ormManager: Repository<User>
...
async findById<User>({ id }: { id: number }): Promise<User | null> {
const t = await this.ormManager.findOne({
where: { id },
})
return t as Promise<User> // here
}
...
}
但我仍然收到错误消息,我不确定从现在开始该怎么做。
这是用户模型定义的样子,我正在使用 TypeORM
export default class User {
@PrimaryGeneratedColumn('uuid')
id: string
@Column({
type: 'json',
nullable: true,
})
data: object
@Column({ type: 'tinyint', default: 1 })
status: number
...
}
这可能是什么原因,我该如何纠正?任何帮助将不胜感激。非常感谢!
【问题讨论】:
-
接口定义中有
id: number,但User类中有id: string。
标签: javascript node.js typescript