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

zer*_*oin 26 typescript typescript1.8

我正在使用Typescript构建一个包含100个独立ts文件的大型库.以前我使用导出模块XXX(稍后重命名为导出命名空间XXX)用于我的所有类,但正如书中所说,这不是推荐的方式,我应该使用import.

所以我尝试导入.这工作得很好:

import * as mylib from "./source/source.ts";
Run Code Online (Sandbox Code Playgroud)

但由于我有100个文件,我不想为所有这些文件添加这样的行.我想通过mylib变量访问所有类.

所以我尝试了这个:

import * as mylib from "./source/";
Run Code Online (Sandbox Code Playgroud)

但是一旦我这样做,我得到:找不到模块'./source/'

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

Geo*_*rab 33

tsc提供的两种模块解析策略都不支持这种行为.您想要的导入声明

import * as mylib from "./source/";
Run Code Online (Sandbox Code Playgroud)

实际上是按以下顺序执行检查:

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";
Run Code Online (Sandbox Code Playgroud)

我假设你在这里使用节点式模块解析,你可能是因为它是推荐的方式.检查typescript文档以获取有关如何在typescript中完成模块解析的更多详细信息.

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

import { Injectable } from '@angular/core'
Run Code Online (Sandbox Code Playgroud)

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';
....
Run Code Online (Sandbox Code Playgroud)