技术解析

Typescript 动态导入模块要怎么做?
0
2021-08-31 22:52:41
idczone

想要在 typescript 中扫描一个目录, 然后导入该目录下的所有文件, 但是这样的话, 文件路径是运行时确定的, 有什么办法吗?


按照 js 的模式,就 require ;
或者做 code generate ?文件在打包的时候就要确定有哪些文件

用 webpack 才能实现,和 js 一样,用 import + async 或者 require 实现

import('./dir/' + filename).then(...) webpack 会帮你好这件事,但这样的话这个目录下所有文件都会打包到 bundle 里面

require 的话会丢失类型吧, 需要手动 as 吗? 这个路子好像可以...



是 Node 环境, 其实我就是想扫描一个目录下的 router 注册下

那没有必要强类型,或者说这里强类型的意义何在。。。
加载路由肯定是框架做的吧,控制器算业务的吧,按道理也不会耦合,用 any 就行,或者直接当 baseController 用就行吧

ES static import 必须是确定的模块路径,ES dynamic import 还不被 nodejs 默认支持( Experimental https://nodejs.org/dist/latest-v11.x/docs/api/esm.html ),所以默认只能用 require,需要类型信息的话用 as 来标注

文件名都不知道類型自然更不知道
你仍然可以 require, 只是 require 得到的東西自己解決類型

emm, 好像也是...那就这样吧
只是想自己拿着 koa 照着 egg 撸一下, koa 不帮我加载路由咯

其实也可以不用扫
写一个 router 的装饰器来收集这些东西也是可以的

哦,想错了,node 上面文件还没加载进来,忽略我吧

静态类型必须在编译时确定,没有指定路径是无法确定的,所以不能实现你的需求

require 会丢类型,但是你需要批量 require 的地方,比如统一注册路由信息,需要类型信息吗?

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服