javascript - Typescript 扩展第三方声明文件

标签 javascript typescript koa

如何扩展第三方声明文件?
例如,我想从 @types/koa 扩展 Context并向其添加一个额外的字段(resource)。
我试过这个:

// global.d.ts
declare namespace koa {
    interface Context {
        resource: any;
    }
}

但它不起作用:

error TS2339: Property 'resource' does not exist on type 'Context'.

更新

产生此错误的我的代码的简化版本:

import {Context} from 'koa';
import User from './Models/User';
class Controller {
   async list(ctx: Context) {
        ctx.resources = await User.findAndCountAll();
        ctx.body = ctx.resources.rows;
        ctx.set('X-Total-Count', ctx.resources.count.toString());
        ctx.status = 200;
    }
}

typescript v2.4

// tsconfig.json
{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "moduleResolution": "node",
    "noImplicitAny": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  },
  "exclude": [
    "node_modules"
  ]
}

最佳答案

你必须使用 module augmentation as described here :

import { Context } from "koa";

declare module "koa" {
    interface Context {
        resource: any;
    }
}

关于javascript - Typescript 扩展第三方声明文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46493253/

相关文章:

javascript - 无法通过动态导入访问对象属性。 Vue.js + ts

Angular 7 HttpHeaders 是空的

javascript - 1.4.3 data-ng-href 不改变页面

Javascript动态选择,使用数组

javascript - 为什么我的正则表达式输出中会出现 a/?

javascript - 使用 WebPack + TypeScript 定义导入的外部模块

regex - 如何管理带或不带的 URL?和/

node.js - KoaJS 中的文件上传

javascript - 如何在 Koa/Express 的每条路线(网页)上共享全局侧边栏/页脚?

javascript - 查看之前是否执行过onClick