Typescript模块扩充和Webpack

时间:2019-10-14 22:57:59

标签: typescript webpack babel-loader ts-loader awesome-typescript-loader

如果未导入通过环境名称空间声明进行的模块扩充,

Typescript将无法编译。完美!

我很难让webpack做到这一点。

名称空间/模块:

// MyNamespace.ts

export class MyClass
{
  constructor() 
  {
    console.log('MyClass');
  }
}

增加它的文件:

// MyClassPatch.ts

import * as MyNamespace from './MyNamespace';

declare module './MyNamespace'
{
  interface MyClass
  {
    Patch(): void;
  }
}

MyNamespace.MyClass.prototype.Patch = function()
{
  console.log('Patched');
};

另一个文件:

// index.ts

import * as MyNamespace from './MyNamespace';
//import './MyClassPatch'; notice that line!

const myClass = new MyNamespace.MyClass();
myClass.Patch();

它编译就可以了!当然,由于未导入MyClassPatch,因此会引发运行时错误。

我已经创建了一个简单的仓库(https://github.com/chadiik/ts-ambient-declarations),尝试使用不同的Typescript加载器(因为我以为是该问题所在)。 npm脚本如下:

  • “ no-bundle”:将使用Typescript(tsc)编译并失败。 (预期)
  • “ bundle-atl”:将使用awesome-typescript-loader与webpack捆绑并成功(未预期!)
  • “ bundle-bl”:将使用babel-loader与webpack捆绑并成功(未预期!)
  • “ bundle-tl”:将使用ts-loader与webpack捆绑并成功(未预期!)

我需要对Webpack进行哪些配置更改?还是那是个错误?

PS:通过在我的 patch 文件名中添加* .patch.ts并在tsconfig中添加一个排除项,可以解决该问题:“ ** / *。patch.ts”,但这在vscode中添加了其他与智能感知有关的问题(在回购中添加了分支“ patch-exclude”)?

谢谢

0 个答案:

没有答案