节点 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&lt;User&gt; 的函数。您的代码都没有显示带有PartialUpdate&lt;User&gt; 类型参数的函数。请将问题简化为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权限

在反对js的选择查询中创建一个新的字段组对象

反对 js:无法使用连接表额外属性更新多对多关系。说附加属性无效

如何在 html/css/js 中创建折叠树表?

软件: Node.js 开发者再一次创建分支

Node.js显示[object Object]而不是result.row