Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 基于缺省和命名导出的膝关节炎扩展包的创建 我创建了一个扩展膝关节炎的模块,并添加了一些基本功能,同时还可以被包装的消费者扩展。这被证明是非常具有挑战性的,所以我希望有人知道如何做到这一点_Typescript - Fatal编程技术网

Typescript 基于缺省和命名导出的膝关节炎扩展包的创建 我创建了一个扩展膝关节炎的模块,并添加了一些基本功能,同时还可以被包装的消费者扩展。这被证明是非常具有挑战性的,所以我希望有人知道如何做到这一点

Typescript 基于缺省和命名导出的膝关节炎扩展包的创建 我创建了一个扩展膝关节炎的模块,并添加了一些基本功能,同时还可以被包装的消费者扩展。这被证明是非常具有挑战性的,所以我希望有人知道如何做到这一点,typescript,Typescript,最终目标是能够在使用我的包时保留类型,如下所示: // Note default and named export - I have also tried only having named exports import MyKoa, { isAuth } from 'mykoa'; import Router from 'koa-router'; // How I try to augment MyKoa in the consumer apps declare module 'mykoa'

最终目标是能够在使用我的包时保留类型,如下所示:

// Note default and named export - I have also tried only having named exports
import MyKoa, { isAuth } from 'mykoa';
import Router from 'koa-router';

// How I try to augment MyKoa in the consumer apps
declare module 'mykoa' {

  // Doesn't work: cannot use namespace "MyKoa" as value
  namespace MyKoa {
    interface Options {
      isReady: boolean;
    }
  }

  // Doesn't work at all
  interface Options {
    isReady: boolean;
  }
}


const app = new MyKoa();
const router = new Router();

router.get('/', isAuth(), ctx => {
  ctx.body = ctx.app.options.isReady; // Typescript should know that (ctx.)app.options.isReady is a boolean
});
app.use(router.routes());

app.listen(3000);
目前我有2个文件:

src/lib/MyKoa.ts:

import Koa from 'koa';

// Augment Koa
declare module 'koa' {
  interface Application extends MyKoa {} // This ensures that MyKoa types are retained in koa-router middleware and works fine 
}

// My Koa class
class MyKoa extends Koa {
  public options: MyKoa.Options = {};
}

// Declare MyKoa namespace to hold relevant types
declare namespace MyKoa {
  interface Options {}
}

export = MyKoa;
src/index.ts:

import MyKoa from './lib/MyKoa';
import isAuth from './lib/isAuth';

export default MyKoa;
export { isAuth };

如果我用文件的完整路径(例如mykoa/dist/lib/mykoa)声明模块,我可以很好地扩展类型,但我不希望包的使用者依赖于包的内部目录结构。这可能吗?是否有更好的方法来提供相同的功能?

对符号的增强要求,以最初定义它的模块为目标,而不是重新导出它的模块,这是当前的TypeScript。我能建议的唯一解决办法是将您希望
mykoa
的消费者增加的符号移动到
mykoa
的主模块中