如何无需额外文件为外部URL模块复用已有模块的类型?
如何无需额外文件为外部URL模块复用已有模块的类型?
我太懂这种不想平白多建一个文件的纠结了!其实不用专门搞个helping-tsc.d.ts,在你当前使用这个URL导入的文件里就能直接解决,方法超简单:
先对应下你的使用场景:你现在是这么导入外部URL模块的:
import foo from 'https://example.com/mymodule/index.js'
这个模块的类型和你node_modules里的mymodule完全一致,之前得额外建文件声明类型,但现在可以直接在当前文件的最顶部(划重点:一定要在所有import语句之前哦)加这段声明:
declare module "https://example.com/mymodule/index.js" { // 直接复用mymodule的所有命名导出类型 export * from 'mymodule'; // 同步mymodule的默认导出类型,让foo的类型完全匹配 export default typeof import('mymodule')['default']; }
这段代码就是在告诉TypeScript:“这个URL路径的模块,所有类型都和本地的mymodule一模一样”,这样TS就能自动识别foo的类型和你本地mymodule的默认导出完全一致,不用再额外维护一个单独的类型文件了。
最后补两个小提醒:
- 这个声明必须放在文件最顶部,要在任何
import或者export语句之前,不然会被当成模块内部的局部声明,起不到全局识别的作用。 - 如果你的项目里好几个文件都要用到这个URL导入,那全局的.d.ts文件可能更省心;但如果只是单个文件使用,直接在当前文件顶部加这段声明就完美解决,完全不用多建文件~
内容来源于stack exchange
相关产品推荐
相关产品推荐

