typescript - 由于打字稿错误,无法将模型与反对中的额外属性相关联
问题描述
我正在尝试将两个模型与“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
我在这里遗漏了什么明显的东西吗?
解决方案
我不认为类型推断能够理解您在这里指的是哪个模型。我怀疑简单的方法看起来像:
.relate({
id: 12345,
url: "test",
} as PartialModelObject<User>);
这是提前声明对象文字的替代方法,例如:
const related: PartialModelObject<User> = { id: 12345, url: "test" };
未经测试,但这是一般的想法。
推荐阅读
- javascript - 如何在函数中返回一个函数并在返回时显示它
- c++ - 如何使用 Visual Studio 为可执行文件设置默认语言属性?
- sorting - 鸡尾酒排序使用多少比较?
- css - Rails 5.2 背景图像未出现(使用 ERB 到 URL)
- c# - 如何将可变长度的模型列表传递给方法
- python-3.x - 将列表分成大约 5K 个字符
- jquery - 无法让 jQuery 追加处理字符串
- memory-leaks - 需要帮助调查复杂 TCL 应用程序中的内存泄漏
- angularjs - 如何在angularjs中启用本地缓存
- xml - 使用 XElement 创建 XML 时解析错误