节点 js + 反对 js + Postgresql。 ' token: string ' 类型的参数不可分配给 'PartialUpdate<User>' 类型的参数
Posted
技术标签:
【中文标题】节点 js + 反对 js + Postgresql。 \' token: string \' 类型的参数不可分配给 \'PartialUpdate<User>\' 类型的参数【英文标题】:Node js + Objection js + Postgresql. Argument of type ' token: string ' is not assignable to parameter of type 'PartialUpdate<User>'节点 js + 反对 js + Postgresql。 ' token: string ' 类型的参数不可分配给 'PartialUpdate<User>' 类型的参数 【发布时间】:2019-07-09 08:48:11 【问题描述】:环境:
-
节点js
ES6
knex: ^0.16.3
反对:^1.5.3
pg: ^7.8.0 ~postgresql
问题:
我无法更新数据库中的用户令牌。我从 typescript 收到一条错误消息。
打字稿错误信息:
类型参数 ' token: string; ' 不可分配给参数 'PartialUpdate
' 类型。对象字面量只能指定已知 属性,并且在类型“PartialUpdate ”中不存在“token”。
问题方法
如果我写@ts-ignore
,方法会起作用,但我看不懂。
为什么它给我一个错误?
import User from '@database/models';
...
const setToken = async (id: any, token: string) =>
try
await transaction(User.knex(), trx =>
User.query(trx)
// An error appears on this line
.update( token )
.where( id ),
);
catch (e)
throw e;
;
我的用户模型
'use strict';
import Model from 'objection';
export default class User extends Model
static get tableName()
return 'users';
static get jsonSchema()
return
type: 'object',
properties:
id: type: 'uuid' ,
full_name: type: 'string', minLength: 1, maxLength: 255 ,
email: type: 'string', minLength: 1, maxLength: 255 ,
avatar: type: 'string' ,
provider_data:
type: 'object',
properties:
uid: type: 'string' ,
provider: type: 'string' ,
,
,
token: type: 'string' ,
created_at: type: 'timestamp' ,
updated_at: type: 'timestamp' ,
,
;
【问题讨论】:
欢迎来到 Stack Overflow!请使用tour(您将获得徽章!),环顾四周,并通读help center,尤其是How do I ask a good question? 我还推荐Jon Skeet 的Writing the Perfect Question 请不要使用大引号来强调,使用他们的报价。 (无论如何都不需要强调。) TypeScript 在代码的哪一行给出了这个错误? 错误是关于一个函数的调用,在该函数中,您将具有token
字符串属性的对象传递给期望PartialUpdate<User>
的函数。您的代码都没有显示带有PartialUpdate<User>
类型参数的函数。请将问题简化为minimal reproducible example 并发布。我们需要查看被调用的函数,以及对它的调用。
按照 SO 的工作方式,您的整个问题(包括任何必要的代码)必须在您的问题中,而不仅仅是链接。两个原因:人们不应该去场外帮助你;和链接腐烂,使问题及其答案对未来的人们毫无用处。请在问题中输入minimal reproducible example in。更多:How do I ask a good question? 和 Something in my web site or project doesn't work. Can I just paste a link to it?
【参考方案1】:
问题是我没有在模型中定义变量的类型。官方图书馆的一个例子让我知道我做错了什么 - https://github.com/Vincit/objection.js/tree/master/examples/express-ts
更新模型
export default class User extends Model
readonly id!: v4;
full_name?: string;
email?: string;
avatar?: string;
provider_data?:
uid: string;
provider: string;
;
token?: string;
static tableName = 'users';
static jsonSchema =
type: 'object',
properties:
id: type: 'uuid' ,
full_name: type: 'string', minLength: 1, maxLength: 255 ,
email: type: 'string', minLength: 1, maxLength: 255 ,
avatar: type: 'string' ,
provider_data:
type: 'object',
properties:
uid: type: 'string' ,
provider: type: 'string' ,
,
,
token: type: 'string' ,
created_at: type: 'timestamp' ,
updated_at: type: 'timestamp' ,
,
;
更新方法
const setToken = async (id: any, token: string) =>
try
User.query()
.update( token )
.where( id );
catch (e)
throw e;
;
【讨论】:
【参考方案2】:**请提供带有变量 partialUpdate 的代码。因为由于变量 partialUpdate 类型的错误声明而导致错误。 TypeScript 完全专注于变量类型,如果变量的类型与您提供给该变量类型的内容不匹配,则会生成错误。您正在将对象类型值 token:string 传递给您的变量 partialUpdate,它只能在您声明它时保存字符串类型变量。 **
PartialUpdate:Object
或
PartialUpdate =
将解决问题。
【讨论】:
以上是关于节点 js + 反对 js + Postgresql。 ' token: string ' 类型的参数不可分配给 'PartialUpdate<User>' 类型的参数的主要内容,如果未能解决你的问题,请参考以下文章
网站公告避免反对百度的限制措施:百度搜索过来的访问会自动禁用js权限