首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在类型记录中向Koa2 2的上下文添加属性

在类型记录中向Koa2 2的上下文添加属性
EN

Stack Overflow用户
提问于 2017-04-01 18:36:43
回答 3查看 10.1K关注 0票数 12

我想在打字稿中使用Facebook的DataLoader和Koa2。我希望每个请求的DataLoader实例与我的每个请求的数据库连接一起。如何才能最好地实现这一目标?

我目前的方法是增强Koa2上下文,但是我失败了,因为我不知道如何修复类型定义。

这是我增强模块的尝试..。

代码语言:javascript
复制
import 'koa';

declare module 'koa' {
    namespace Application {
        interface BaseContext {
            dataLoader(): any;
        }
    }
}

Application.BaseContext.prototype.dataLoader = function() {
    console.log("Cannot find name 'Application' at line 11 col 1");
}

除了日志调用中显示的错误之外,当我导入上面的内容并尝试调用Property 'dataLoader' does not exist on type 'BaseContext'时,我也会得到dataLoader

干杯

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-25 23:49:14

只是想出了一种不需要任何类型黑客的方法:

代码语言:javascript
复制
interface ICustomAppContext {
  mySlowToInitializeClient: string;
}

interface ICustomAppState {
  poop: string;
}

const app = new Koa<ICustomAppState, ICustomAppContext>();

详情请参见https://github.com/DefinitelyTyped/DefinitelyTyped/blob/b081a5b7d0db7181901d7834f8a85206af263094/types/koa/index.d.ts#L434

票数 18
EN

Stack Overflow用户

发布于 2017-10-23 23:03:22

看一看模块增强,了解它是如何工作的。

你确实可以这样做:

代码语言:javascript
复制
import { Context } from "koa";

declare module "koa" {
    /**
     * See https://www.typescriptlang.org/docs/handbook/declaration-merging.html for
     * more on declaration merging
     */
    interface Context {
        myProperty: string;
        myOtherProperty: number;
    }
}
票数 10
EN

Stack Overflow用户

发布于 2017-04-24 09:25:10

好吧,我想我还有很多东西要学。打字问题的解决办法似乎是.

代码语言:javascript
复制
import { BaseContext } from 'koa';

declare module 'koa' {
  interface BaseContext {
    dataLoader(): any;
  }
}

而且,因为BaseContext是一个接口而不是一个类,所以您必须在实例化Koa的Application类之后定义dataLoader实现。

代码语言:javascript
复制
const app = new Application();

app.context.dataLoader = function() {
  console.log('OK, this works.');
}

app.context是用来创建每个请求的上下文对象的原型。

我希望对这个答案的正确性有任何评论。谢谢。

啊..。在公共场合学习。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43160598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档