如何扩展Koa的app,在ts下。
发布于 1 年前 作者 HobaiRiku 1034 次浏览 来自 问答

如题,如果使用js写koa的时候,app.xx = xx 是完全没有问题的; 但是在ts下编译器会报错,因为在定义中,koa的Application没有xx这个属性。 观察了types/koa的写法,和egg有区别,不是很懂,感觉就是定义了一个class Application,以及一个空间,而这个class引用这空间,空间内的interface是可以扩展的,而这个Application似乎没找到怎么去弄。 目前可以通过增加比如:

declare module 'koa' {
  interface Context {
    user: User | null;
  }
}

这样来扩展ctx.user,然而没找到什么办法去扩展这个app,使得app.xx = xx在编辑器上是合法的,而且后续使用到app.xx 也会得到对应类型的提示。

3 回复

https://www.typescriptlang.org/docs/handbook/declaration-merging.html

参考ts文档 定义同名interface即可扩展已有interface。 扩展的属性不能和已有的冲突

@noe132 Application是一个class

回到顶部