如何导入在Typescript中具有Typescript主文件的npm模块?

Lia*_*eot 4 node.js npm typescript

我不知道导入Typescript npm模块的正确方法是什么。

这是我要尝试的方法:

模块package.json

{
  "name": "my-module",
  "main": "src/myModule.ts"
}
Run Code Online (Sandbox Code Playgroud)

模块src / myModule.ts

export module MyModule {
  // Code inside
}
Run Code Online (Sandbox Code Playgroud)

使用npm模块的代码

import { MyModule } from 'my-module'; // Doesn't work
import { MyModule } = require('my-module'); // Doesn't work.
Run Code Online (Sandbox Code Playgroud)

该模块作为依赖项安装在package.json中,例如,我可以

import { MyModule } from '../node_modules/my-module/src/myModule.ts';
Run Code Online (Sandbox Code Playgroud)

但这显然不是很好。我想要的是一种只导入主模块文件中所有导出内容的方法,但是似乎不可能。

Osc*_*Paz 6

package.json中的“ main”仅对打包工具(如webpack或angular-cli的构建工具)有用。用于根据用户需求选择不同的捆绑软件:ES6,ES5,UMD ...

TypeScript忽略了这一点。您需要指定所需的文件,就像引用自己的项目一样:

import { MyModule } from 'my-module/src/myModule';
Run Code Online (Sandbox Code Playgroud)

其他类似Angular的库所做的是创建一个桶,该文件通常称为“ index.ts”或“ index.d.ts”,该文件可以导入和导出库中的所有类型。

这样做的好处是,如果在my-module的根目录中创建一个index.d.ts文件:

export { MyModule } from './src/myModule';
// other exports
Run Code Online (Sandbox Code Playgroud)

您可以简单地做到这一点:

import {MyModule} from 'my-module'
Run Code Online (Sandbox Code Playgroud)

作为打字稿,从文件夹导入时,会自动使用index.tsindex.d.ts文件。