首页 > 解决方案 > 由于打字稿错误,无法将模型与反对中的额外属性相关联

问题描述

我正在尝试将两个模型与“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 | 也许复合ID[] | 部分模型对象 | 部分模型对象[]'。对象字面量只能指定已知属性,并且 'id' 不存在于类型 'CompositeId | 也许复合ID[] | 部分模型对象 | 部分模型对象[]'。

但是,如果我尝试在没有额外属性的情况下关联模型,它会完美运行:

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

我在这里遗漏了什么明显的东西吗?

标签: typescriptobjection.js

解决方案


我不认为类型推断能够理解您在这里指的是哪个模型。我怀疑简单的方法看起来像:

.relate({
  id: 12345,
  url: "test",
} as PartialModelObject<User>);

这是提前声明对象文字的替代方法,例如:

const related: PartialModelObject<User> = { id: 12345, url: "test" };

未经测试,但这是一般的想法。


推荐阅读