节点 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
- ES6
- 膝盖:^0.16.3
- 异议:^1.5.3
- pg: ^7.8.0 ~ postgresql
问题:
我无法更新数据库中的用户令牌。我从打字稿中收到一条错误消息。
打字稿错误信息:
Argument of type '{ token: string; }' is not assignable to parameter
of type 'PartialUpdate<User>'. Object literal may only specify known
properties, and 'token' does not exist in type 'PartialUpdate<User>'.
问题方法
如果我写@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' },
},
};
}
}
**请提供带有变量 partialUpdate 的代码。因为您由于变量 partialUpdate 类型的错误声明而出错。 TypeScript 完全专注于变量类型,如果变量的类型与您提供的内容不匹配,则会生成该变量类型错误。您正在将对象类型值 {token:string} 传递给您的变量 partialUpdate ,它在您声明它时只能保存字符串类型变量。 **
PartialUpdate:Object
或
PartialUpdate = {}
将解决问题。
问题是我没有在我的模型中定义变量的类型。官方图书馆的一个例子让我知道我做错了什么 - 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;
}
};
环境:
- 节点js
- ES6
- 膝盖:^0.16.3
- 异议:^1.5.3
- pg: ^7.8.0 ~ postgresql
问题:
我无法更新数据库中的用户令牌。我从打字稿中收到一条错误消息。
打字稿错误信息:
Argument of type '{ token: string; }' is not assignable to parameter of type 'PartialUpdate<User>'. Object literal may only specify known properties, and 'token' does not exist in type 'PartialUpdate<User>'.
问题方法
如果我写@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' },
},
};
}
}
**请提供带有变量 partialUpdate 的代码。因为您由于变量 partialUpdate 类型的错误声明而出错。 TypeScript 完全专注于变量类型,如果变量的类型与您提供的内容不匹配,则会生成该变量类型错误。您正在将对象类型值 {token:string} 传递给您的变量 partialUpdate ,它在您声明它时只能保存字符串类型变量。 **
PartialUpdate:Object
或
PartialUpdate = {}
将解决问题。
问题是我没有在我的模型中定义变量的类型。官方图书馆的一个例子让我知道我做错了什么 - 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;
}
};