【发布时间】:2018-12-20 05:02:53
【问题描述】:
我正在使用这个库 https://github.com/chentsulin/koa-bearer-token,它为 koa 库请求对象添加了一个额外的属性,例如 ctx.request.token。因此,如果我直接使用 koa 类型,我会收到一个错误,告诉我 token 属性在 ctx.request.token 上不存在。
我目前的解决方案
我创建了一个名为 koa-bearer-token.d.ts 的类型定义文件,其中包含库的类型和扩展 koa 上下文/请求类型的导出:
declare module 'koa-bearer-token' {
import {Context, Request, Middleware} from 'koa';
interface Options {
queryKey?: string;
bodyKey?: string;
headerKey?: string;
reqKey?: string;
}
interface RequestWithToken extends Request {
token?: string
}
interface ContextWithToken extends Context {
request: RequestWithToken
}
export default function bearerToken(options?: Options): Middleware;
export {RequestWithToken, ContextWithToken};
}
然后我在其他文件中使用它:
import {ContextWithToken} from 'koa-bearer-token';
const someFunction = (ctx: ContextWithToken) => {
const token = ctx.request.token; // <-- No longer errors
};
我为什么要问这个问题
现在可行,但我担心这不是最好的方法,因为如果我将来需要添加更多属性,它将无法正常工作,理想情况下,我只想创建一个 koa.d.ts 文件添加到库类型然后我可以继续使用 import {Context} from 'koa'; 而不是 import {ContextWithToken} from 'koa-bearer-token'; 但是当我创建 koa.d.ts 它会覆盖所有库类型而不是在它们之上添加。
这是我的 tsconfig.json 以防万一
{
"compilerOptions": {
"module": "commonjs",
"esModuleInterop": true,
"target": "es6",
"noImplicitAny": true,
"moduleResolution": "node",
"sourceMap": true,
"outDir": "dist",
"baseUrl": ".",
"paths": {
"*": [
"node_modules/*",
"src/@types/*"
]
}
},
"include": [
"src/**/*"
]
}
【问题讨论】:
标签: typescript types koa