我有两个带有自己模块的文件,Sub.js and 父.js
父.js:
import Sub from "/.Sub.js"
export default class Parent {
static createSomething(){
new Sub();
}
}
Sub.js:
import Parent from "/.Parent.js"
export default class Sub extends Parent {
contructor(){}
}
这样我就得到了错误:
ReferenceError:初始化之前无法访问词法声明“X”
无法使用子模块,因为需要父模块,但导入父模块需要导入子模块,我认为?
这可以通过将它们放在同一个文件中来解决,但我想知道是否有办法将它们保留为单独的文件。
实现此类循环依赖项时,请确保您在其他代码中使用的文件不包含顶级文件export
需要其他文件的声明。在你的情况下:
- 如果你导入
Sub
在其他一些文件中,它的顶级export
需要Parent
这需要Sub
,那么就无法解决:蛇咬自己的尾巴
- 如果你导入
Parent
在其他一些文件中,它的顶级export
不需要Sub
立即(仅当createSomething
正在被调用)。在这种情况下,Parent
export
完全解决,那么Sub
文件能够解析自己的export
以及。
作为一般建议,我建议不要循环依赖。然而,这是一个可能的解决方法,利用动态import https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import语法而不是静态语法:
父.ts
export default class Parent {
static async createSomething() {
const Sub = await import('./sub').then(x => x.default);
return new Sub;
}
}
Parent.createSomething().then(console.log);
sub.ts
import Parent from "./parent"
export default class Sub extends Parent {
contructor() { }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)