我正在使用 typescript 进行依赖注入(inject),这意味着我可以在模块中创建一个对象,而无需导入该类(我导入了一个注入(inject)器,它为我提供了我需要的对象实例)。如果我现在想为接收变量提供类型,则会收到未解析类型
错误。有什么好的解决办法吗?
示例
Injector.injectMainHelper(); 返回了“MainHelper”类型的对象,但当前模块未知该类型,因为我尚未导入 MainHelper
(而且我不想导入它)。
let mainHelper:MainHelper = Injector.injectMainHelper();
您可以查看完整代码here .
最佳答案
声明接口(interface)怎么样?
接口(interface).d.ts
interface IMainHelper {
//...
}
main_helper.ts
class MainHelper implements IMainHelper {
//...
}
other_file.ts
/// <reference path="./interfaces.d.ts" />
import Injector from "./injector";
let mainHelper: IMainHelper = Injector.injectMainHelper();
注意:如果您添加对 tsconfig.json
的引用,则无需将其添加到文件中。
更新
我刚刚尝试过,如果您有两个文件:
test1.ts
class MainHelper {
}
var Injector = {
injectMainHelper: function() {
return new MainHelper();
}
}
export default Injector;
test2.ts
import Injector from "./test1";
let mainHelper = Injector.injectMainHelper(); // mainHelper is MainHelper
TypeScript 能够推断 mainHelper
的类型。如果您不添加类型,编译器将自动检测其类型。
如果您有更通用的内容,例如:
var Injector = {
injectSomething: function(somethingID) {
// find something and dependencies
return new Something(..dependencies);
}
}
解决方案是使用泛型:
let mainHelper = Injector.injectSomething<MainHelper>("mainHelperID");
但在这种情况下,您将再次需要接口(interface)...
关于javascript - Typescript - 为自己的类进行类型定义而不导入它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37528404/