在TypeScript 手册中,描述了几种导入模块的技术:
import { ZipCodeValidator } from "./ZipCodeValidator";import { ZipCodeValidator as ZCV } from "./ZipCodeValidator";import * as validator from "./ZipCodeValidator";我希望还有一个选择,但我无处可寻.是否可以从给定目录导入所有模块?
我想语法应该或多或少像这样:import * from "./Converters".
mar*_*ter 37
不,这是不可能的.大多数人所做的是创建一个index.js文件,该文件重新导出同一目录中的所有文件.
例:
my-module/
a.ts
b.ts
index.ts
Run Code Online (Sandbox Code Playgroud)
a.ts
export default function hello() {
console.log("hello");
}
Run Code Online (Sandbox Code Playgroud)
b.ts
export default function world() {
console.log("world");
}
Run Code Online (Sandbox Code Playgroud)
index.ts
export { default as A } from "./a";
export { default as B } from "./b";
Run Code Online (Sandbox Code Playgroud)
可以删除索引名称(与javascript中相同):
import * as whatever from "./my-module";
console.log(whatever);
// Logs: { A: [Function: hello], B: [Function: world] }
Run Code Online (Sandbox Code Playgroud)
Tom*_*ard 24
我不确定对生产代码是否安全,但我使用以下命令在目录中导入测试代码
import glob from 'glob'
new Promise((resolve, reject) => {
glob(__dirname + '/**/*.ts', function (err, res) {
if (err) {
reject(err)
} else {
Promise.all(
res.map(file => {
return import(file.replace(__dirname, '.').replace('.ts', ''))
})
).then(modules => {
resolve(modules)
})
}
})
}).then(modules => {
// do stuff
})
Run Code Online (Sandbox Code Playgroud)
小智 8
这是 @tom-howard 使用 ES2022 语法的答案。
import glob from 'glob';
let modules;
try {
const res = await glob(__dirname + '/**/*.ts');
modules = Promise.all(res.map((file) => (
import(file.replace(__dirname, '.').replace('.ts', ''))
)));
} catch (err) {
// handle `err`
}
// use `modules`
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24722 次 |
| 最近记录: |