我正在使用Typescript构建一个包含100个独立ts文件的大型库。 以前我使用导出模块XXX (稍后重命名为导出命名空间XXX )用于我的所有课程,但正如书籍所说,这不是推荐的方法,我应该使用导入代替
所以我尝试导入。这很好用:
import * as mylib from "./source/source.ts";
但由于我有100个文件,我不想为所有这些文件添加这样的行。我希望通过 mylib 变量访问我的所有课程。
所以我尝试了这个:
import * as mylib from "./source/";
但是当我这样做时,我得到:无法找到模块' ./ source /'
有没有办法从一个包含多行文件的文件夹中导入所有类?
答案 0 :(得分:30)
tsc提供的两种模块解析策略都不支持这种行为。您想要的导入声明
import * as mylib from "./source/";
实际上是按此顺序执行检查:
1. (does package.json have a typings key? If so, import this file)
2. import * as mylib from "./source/index.ts";
3. import * as mylib from "./source/index.tsx";
4. import * as mylib from "./source/index.d.ts";
我假设你在这里使用节点式模块解析,你可能会这样,因为它是推荐的方式。检查typescript docs以获取有关如何在打字稿中完成模块解析的更多详细信息。
通常,您要完成的工作是创建一个index.d.ts
文件,该文件用作导出其余模块的入口点。
我使用angular2作为例子:
您常见的angular2导入如下所示:
import { Injectable } from '@angular/core'
core
只是一个位于@angular
目录中的目录。就像您的source
目录一样。但是,在核心目录中存在index.d.ts
文件:
/**
* @module
* @description
* Starting point to import all public core APIs.
*/
export * from './src/metadata';
export * from './src/util';
export * from './src/di';
....