假设我有一个包含50个文件的模块,每个文件都包含以下内容:
export class <SomeClassName> { /* 内容 */ }
然后,我创建了一个根文件,通过重新导出所有文件来简化使用。因此,它看起来像这样:
export * from "./src/some-class-1";
export * from "./src/some-class-2";
export * from "./src/some-class-3";
// etc
然后,我通过TSC运行它,使用"common"模块目标和"es5"描述符输出。
到目前为止还不错。我的
package.json
文件名为my-module
,将输出的index.js
作为模块的入口点。然后,我决定在另一个TypeScript项目中使用这个模块。所以我对它进行npm安装(假设),
npm install my-module
,它会自动拉取d.ts文件和实际的commonjs模块,因此我可以使用它们。一切看起来都很好。然后出现了问题。我决定使用这个模块:
import {SomeClass1} from 'my-module'
在TS世界中,它无法识别my-module
,因为如果我们回过头来看一下输出的index.js,它并没有包含一个环境模块。所以问题在于,通常情况下,common模块使用package.json作为包含模块名称的参考点,但是TS使用d.ts文件。那么我想好了,我需要在
index.ts
中将我的重新导出包装在一个模块中,所以我尝试:
export module "my-module" { /* all other re-exports */ }
但是结果发现,你只能在环境模块中使用字符串模块名称,并且你只能将它们放在d.ts文件中,但是我的d.ts文件是从现有代码库生成的。所以这是我的困境,我可以手动添加
declare module "my-module"
包装到我的d.ts中,但这不是很自动化,或者我可以像ES6语法的博客文章一样引用文件,这将导致大量的import {blah} from "../node_modules/my-module/dist/index"
,我们都希望达成共识,这有点傻。因此,在使用ES6语法时,我找不到任何其他适用的方法,因为所有关于这个主题的博客文章和文档都使用相对文件导入,而不是通过d.ts文件共享。
那么,在这里是否有一种方法可以将我的重新导出包装在一个文本模块名称中?或者至少告诉index.d.ts包含一个环境模块?(请记住,它将为项目中的每个文件输出一个d.ts文件,但我们只关心通过index.d.ts导入模块,因为它重新导出了所有内容)。
d.ts
文件,引用生成的文件并在其中声明你的环境模块。希望当人们转移到System.js
时,这将不再是必需的。 - billc.cn