我想在打字稿中使用Facebook的DataLoader和Koa2。我希望每个请求的DataLoader实例与我的每个请求的数据库连接一起。如何才能最好地实现这一目标?
我目前的方法是增强Koa2上下文,但是我失败了,因为我不知道如何修复类型定义。
这是我增强模块的尝试..。
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。
干杯
发布于 2019-01-25 23:49:14
只是想出了一种不需要任何类型黑客的方法:
interface ICustomAppContext {
mySlowToInitializeClient: string;
}
interface ICustomAppState {
poop: string;
}
const app = new Koa<ICustomAppState, ICustomAppContext>();发布于 2017-10-23 23:03:22
看一看模块增强,了解它是如何工作的。
你确实可以这样做:
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;
}
}发布于 2017-04-24 09:25:10
好吧,我想我还有很多东西要学。打字问题的解决办法似乎是.
import { BaseContext } from 'koa';
declare module 'koa' {
interface BaseContext {
dataLoader(): any;
}
}而且,因为BaseContext是一个接口而不是一个类,所以您必须在实例化Koa的Application类之后定义dataLoader实现。
const app = new Application();
app.context.dataLoader = function() {
console.log('OK, this works.');
}app.context是用来创建每个请求的上下文对象的原型。
我希望对这个答案的正确性有任何评论。谢谢。
啊..。在公共场合学习。
https://stackoverflow.com/questions/43160598
复制相似问题