Typescript 1.8模块:从文件夹导入所有文件

Typescript 1.8模块:从文件夹导入所有文件,typescript,typescript1.8,Typescript,Typescript1.8,我正在用Typescript构建一个大型库,其中包含大约100个单独的ts文件。 以前我对我的所有类都使用了导出模块XXX(后来改名为导出名称空间XXX),但正如书中所说,这不是推荐的方法,我应该使用导入 所以我试着导入。这很好: import * as mylib from "./source/source.ts"; 但由于我有100个文件,我不想为所有文件添加这样一行。我希望我的所有类都可以通过mylib变量访问 所以我试了一下: import * as mylib from "./sou

我正在用Typescript构建一个大型库,其中包含大约100个单独的ts文件。 以前我对我的所有类都使用了导出模块XXX(后来改名为导出名称空间XXX),但正如书中所说,这不是推荐的方法,我应该使用导入

所以我试着导入。这很好:

import * as mylib from "./source/source.ts";
但由于我有100个文件,我不想为所有文件添加这样一行。我希望我的所有类都可以通过mylib变量访问

所以我试了一下:

import * as mylib from "./source/";
但一旦我这样做,我就会得到:找不到模块。/source/'


有没有办法用一行从包含多个文件的文件夹中导入所有类?

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中完成模块解析的更多详细信息,请查看

通常,您要完成的是创建一个
index.d.ts
文件,作为导出其余模块的入口点。 我以angular2为例: 常见的angular2导入如下所示:

import { Injectable } from '@angular/core'
core
只是位于
@angular
目录中的一个目录。就像您的
源代码
目录一样。但是,在核心目录中有一个
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';
....

谢谢,这很好!我开始应用这种方法,并面临另一个问题:也许你也知道答案:)和另一个相关问题-在我自己的项目中,我可以导入所有类(可能使用index.d.ts?),而不是逐个导入我在类中使用的类吗?或者这是错误的想法?我认为这不是一个好主意,因为您的webpack/browserify脚本加载程序无法检测不同配置的严格源代码边界。例如,管理模块及其依赖项、公共网站及其依赖项。您总是会下载所有源代码,即使其中一些源代码不用于特殊页面。实际上,
@angular/core
中的
.d.ts
文件称为
core.d.ts
,而不是
index.d.ts
,至少在某些情况下,此限制是否涉及逻辑业务决策,或者只是性能问题/没有人直接创建此功能?您可以连接所有这些文件。这样,您只需导入单个模块。或者,您可以列出目录
fs.readdir('sources')
中的所有文件,然后列出
require()
中的每个循环。