嘿,
是否可以编写一个外部(通用)模块“ A”,然后在另一个模块“ B”的代码中,将变量声明为模块“ A”的类型,而无需使用导入,最终导致需要模块“ A”。
我想要这样做的原因是,我将对模块“ A”的引用传递给另一个模块“ B”中的类的构造函数,因为我希望模块“ A”成为单例。 但是我想在构造函数中将参数键入模块“ A”的参数,就像模块“ A”已使用import A = require(“ A”);导入一样。
我想要单例模块的原因是该模块可能包含用于管理数据库连接等的类的实例,并且我真的不希望它们在每次导入时都重新初始化。 我希望能够传递它们,而不是依靠潜在的“节点模块缓存”魔术。
有没有办法做到这一点? 我想过可以通过其他方式实现我想要的东西,但是如果可能的话,这感觉像是最简单的。
如果未在值位置使用模块导入,则将其删除。 因此,如果您导入的模块A
仅在类型位置中使用,则不会写出require
调用。
例如:
// B.ts
import s = require("./A");
var x: typeof s;
发出
var x;
这回答了你的问题了吗?
哦,太好了! 它肯定回答了我的问题。 我在文档中找不到此内容,因此感谢您的帮助。 :)
嗨伙计,
我有一个相同的问题。 我尝试了上述解决方案,但现在对我有用。
我正在从webpack模块中从父类“父”中导入类A {
我只想为这些类调用构造函数。 我尝试了const a = A({data:1}); 这不会在编译时产生任何TS错误。 但是它在运行时javascript上中断了,类型错误A不是构造函数。
我是否需要创建自定义类型并将其添加到devDependancies中? 还是有一种特定的方式来导出我的“父级”模块,例如导出默认值。
任何帮助表示赞赏。
干杯,
苏迪普
最有用的评论
如果未在值位置使用模块导入,则将其删除。 因此,如果您导入的模块
A
仅在类型位置中使用,则不会写出require
调用。例如:
发出
这回答了你的问题了吗?