问题描述
我试图将两个模型与“url”的额外属性联系起来:
if (typeof session.id === "number") {
const sessionUser = await Session.relatedQuery("users")
.for(session.id)
.relate({
id: 12345,// error here
url: "test",});
}
我从打字稿中得到的错误是这样的:
'{ id: number; 类型的参数网址:字符串; }' 不能分配给 'string | 类型的参数数量 |复合 ID |也许CompositeId[] |部分模型对象 |部分模型对象[]'。 对象字面量只能指定已知属性,并且类型 'CompositeId | 中不存在 'id'也许CompositeId[] |部分模型对象 | PartialModelObject[]'.
但是,如果我尝试在没有额外属性的情况下关联模型,它可以完美运行:
if (typeof session.id === "number") {
const sessionUser = await Session.relatedQuery("users")
.for(session.id)
.relate(userId); //userId is just a number e.g. 5
}
这是我的会话模型。我的 User 模型也有额外的属性,作为安全网:
export class Session extends Model {
host_id?: number;
url?: string;
static get tableName() {
return "sessions";
}
static relationMappings = {
users: {
relation: Model.ManyToManyRelation,modelClass: path.join(__dirname,"User"),join: {
from: "sessions.id",through: {
from: "sessions_users.session_id",to: "sessions_users.user_id",extra: ["url"],},to: "users.id",};
}
以下是额外属性的文档:https://vincit.github.io/objection.js/recipes/extra-properties.html
我在这里遗漏了什么明显的东西吗?
解决方法
我认为类型推断无法理解您在这里指的是哪个模型。我怀疑简单的方法看起来像:
.relate({
id: 12345,url: "test",} as PartialModelObject<User>);
这是提前声明对象文字的替代方法,例如:
const related: PartialModelObject<User> = { id: 12345,url: "test" };
未经测试,但这是总体思路。