关于在context上下文流转过程中,怎么增加自己的业务节点的问题。

最近在试着用TS写一个DENO项目,使用了oak,这几天在vscode上安装了deno的插件,然后报了很多的语法错。
主要是TS的类型限制以外的属性找不到,以下是代码:

//javascript
const DataBus = async (ctx, next) => {
    ctx.mydata = {};
    await next();
}
//这在js里是正常的,可以走下去

//typecript
const DataBus = async (ctx: any, next) => {
    ctx.mydata = {};
    await next();
}
//这在ts里没有安装插件的时候是正常的,可以走下去,因为TS里默认可以用any类型

//typecript  vscode-deno插件
const DataBus = async (ctx: Context, next) => {
    ctx.mydata = {};
    await next();
}
//现在安装了DENO插件,因为插件不允许使用any类型,
//所以换了类型验证Context,这个ctx.mydata属性不可用

我的问题是我需要通过什么方式可以增加一个自定义的mydata属性,值可以是number、string、json object,使mydata可以流转到next().

Context 是有范型的,内部状态存储在 ctx.state

const DataBus = async (ctx: Context<T>, next) => {
    ctx.state.mydata = {};
    await next();
}

T 换成你的类型。

谢谢,我的问题解决了,没想到ctx.state还有这功效,用它就够了 :grinning: :handshake: