使用ctx.database.set,add求值表达式报错
不能将类型“{ $add: (number | { $: string; }) ; }”分配给类型“Number”。
对象字面量只能指定已知属性,并且“$add”不在类型“Expr”中。
await ctx.database.set("user",{nickname:player_copy[i]},{
exp: {$add: [{ $: "exp" }, increment]} ,
})
dev模式下插件可以正常运行,但不能编译,请问该怎么解决呢
1 个赞
还有一个报错是session: Session会有报错,我拿文档里的例子https://koishi.chat/zh-CN/guide/database/builtin.html#attach-%E4%BA%8B%E4%BB%B6 试了一下也是这样
import { Session } from "inspector"
import { Context, Schema, observe } from "koishi"
export const name = "test1"
export interface Config {}
export const Config: Schema<Config> = Schema.object({})
declare module 'koishi' {
interface User {
msgCount: number
}
}
export function apply(ctx: Context) {
ctx.model.extend('user', {
msgCount: 'integer',
})
ctx.before('attach-user', (session, fields) => {
fields.add('msgCount')
})
ctx.middleware((session: *Session<'msgCount'>*, next) => {
// 这里更新了 msgCount 数据
session.user.msgCount++
return next()
})
同样也是在dev模式下插件可以正常运行
2 个赞
What on the earth is that the “inspector” coming from?
这个“督察”到底是哪来的?
Are you sure with it?
I don’t think that the $add
is actually working here. What is the purpose at the first place?
你确定吗?
我不认为“$add”实际上在这里起作用。 首先的目的是什么?
2 个赞
Wait,
你这代码补全抽风?Session
也应该是从 koishi
中import吧。
2 个赞
ilharp
2023 年11 月 6 日 13:39
10
原来是这样
那就是 这里 的了
↑ 并且这里还不是 typo 问题而是本身就有问题
额,你是不是想给数据库中用户的 exp
字段加上 increment
?
如果你已经得到该用户的exp,请先用临时变量加上increment,然后exp右边换为
一种替代方案:
先获取符合的数据行
// previous process
let exps=await ctx.database.get("user",{nickname: [ player_copy[i] ]},['exp']);
// 这里处理为没有的用户默认increment
let afterExp=increment;
if (exps.length>0){ // 没有这个用户就不会取值/加上,如果已有判断则可删除
let userexp=exps[0]['exp']; // 如果插入没错/nickname为主键,那么只有一个查询记录
afterExp+=userexp;
}
await ctx.database.set("user",{nickname: [ player_copy[i] ]},{ exp: afterExp });
// after process
2 个赞
drwdox
2023 年11 月 6 日 14:11
12
inspector是yarn setup自动生成的,可能是这的问题
我把Session从koishi中导入就不报错了
1 个赞
drwdox
2023 年11 月 6 日 14:14
13
这个应该就不报错了
但我现在觉得我也暂时也不需要build了,我就忽略报错在dev下运行就好了www
1 个赞
shigma
2023 年11 月 6 日 20:03
14
感谢给文档纠错,本身应该是兼容的,只是抹去了类型。之后更新一下写法。
3 个赞