Typescript: 将变量声明为外部模块的类型,而无需导入

创建于 2015-09-08  ·  3评论  ·  资料来源: microsoft/TypeScript

嘿,

是否可以编写一个外部(通用)模块“ A”,然后在另一个模块“ B”的代码中,将变量声明为模块“ A”的类型,而无需使用导入,最终导致需要模块“ A”。

我想要这样做的原因是,我将对模块“ A”的引用传递给另一个模块“ B”中的类的构造函数,因为我希望模块“ A”成为单例。 但是我想在构造函数中将参数键入模块“ A”的参数,就像模块“ A”已使用import A = require(“ A”);导入一样。

我想要单例模块的​​原因是该模块可能包含用于管理数据库连接等的类的实例,并且我真的不希望它们在每次导入时都重新初始化。 我希望能够传递它们,而不是依靠潜在的“节点模块缓存”魔术。

有没有办法做到这一点? 我想过可以通过其他方式实现我想要的东西,但是如果可能的话,这感觉像是最简单的。

Question

最有用的评论

如果未在值位置使用模块导入,则将其删除。 因此,如果您导入的模块A仅在类型位置中使用,则不会写出require调用。

例如:

// B.ts
import s = require("./A");
var x: typeof s;

发出

var x;

这回答了你的问题了吗?

所有3条评论

如果未在值位置使用模块导入,则将其删除。 因此,如果您导入的模块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中? 还是有一种特定的方式来导出我的“父级”模块,例如导出默认值。

任何帮助表示赞赏。

干杯,
苏迪普

此页面是否有帮助?
0 / 5 - 0 等级