求值表达式报错

使用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 个赞

额 你甚至都不贴一下你写的代码?

1 个赞

块引用
await ctx.database.set(“user”,{name:player[i]},{
exp: {$add: [{ $: “exp” }, increment]} ,
})

这一段代码是这样的

2 个赞

2 个赞

还有一个报错是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()
  })

image
同样也是在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 个赞

$add 是什么写法?文档有说吗?

1 个赞

image

1 个赞

原来是这样

那就是 这里 的了

↑ 并且这里还不是 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 个赞

inspector是yarn setup自动生成的,可能是这的问题
我把Session从koishi中导入就不报错了

1 个赞

这个应该就不报错了
但我现在觉得我也暂时也不需要build了,我就忽略报错在dev下运行就好了www

1 个赞

感谢给文档纠错,本身应该是兼容的,只是抹去了类型。之后更新一下写法。

3 个赞