Open Nick-Hopps opened 1 year ago
以 webpack 为例,当前 tsup 生成的 d.ts 文件:
declare const _default: (options?: Options) => any; export { _default as default };
然后我在 webpack 配置相关的脚本中(plugin.js)开启 checkJs:
checkJs
// @ts-check const AutoImport = require('unplugin-auto-import/webpack'); function createWebpackPlugins({ isDev }) { // ... AutoImport({ // 自动导入 vue/vux/vue-router 相关函数,如:ref, reactive, toRef 等 imports: ['vue', 'vuex', 'vue-router'], eslintrc: { enabled: true }, }), }
此时 VSCode 会报错:
AutoImport ~~~~~~~~ This expression is not callable. Type 'typeof import(".../unplugin-auto-import/dist/webpack")' has no call signatures.ts(2349)
原因应该是 VSCode 的 ts 运行态把模块解析为 { default: AutoImport } 对象,理由是我把代码改成 const { default: AutoImport } = require('unplugin-auto-import/webpack'); 后就可以正常 typing 了。
{ default: AutoImport }
const { default: AutoImport } = require('unplugin-auto-import/webpack');
然后我试着手动修改 d.ts 成这样:
declare function _default(options?: Options): any; declare namespace _default { const temp: (options?: Options) => any; export { temp as default } } export = _default;
之后就可以正常 typing 了,不过由于这个 d.ts 文件是工具生成的,不知道有没有别的办法可以解决的。
noop
System: OS: Windows 10 10.0.19044 CPU: (12) x64 Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz Memory: 14.28 GB / 31.78 GB Binaries: Node: 16.19.1 - ~\scoop\apps\nvm\current\nodejs\nodejs\node.EXE npm: 8.19.3 - ~\scoop\apps\nvm\current\nodejs\nodejs\npm.CMD
npm
找了一下,发现是 rollup-plugin-dts 不支持 export = 的形式,所以解决方案是,要么手动写 d.ts 文件,要么等插件支持。
export =
是否还有别的方式可以让 d.ts 同时支持 ESM 和 CJS 的呢?
我也想知道,有啥类型的 bundler 能支持 export = 的形式 QAQ
Describe the bug
以 webpack 为例,当前 tsup 生成的 d.ts 文件:
然后我在 webpack 配置相关的脚本中(plugin.js)开启
checkJs
:此时 VSCode 会报错:
原因应该是 VSCode 的 ts 运行态把模块解析为
{ default: AutoImport }
对象,理由是我把代码改成const { default: AutoImport } = require('unplugin-auto-import/webpack');
后就可以正常 typing 了。然后我试着手动修改 d.ts 成这样:
之后就可以正常 typing 了,不过由于这个 d.ts 文件是工具生成的,不知道有没有别的办法可以解决的。
Reproduction
noop
System Info
Used Package Manager
npm
Validations