我使用了typescript的依赖注入,意味着我可以在不导入类的情况下在模块中创建一个对象(我导入一个Injector而不是我需要的对象实例)。如果我现在想要为接收变量提供类型,则会出现Unresolved type
错误。对此有什么好的解决方案吗?
示例
类型' MainHelper'由Injector.injectMainHelper();
返回,但当前模块未知该类型,因为我还没有导入MainHelper
(我不想导入它)。
let mainHelper:MainHelper = Injector.injectMainHelper();
您可以查看完整代码here。
答案 0 :(得分:1)
如何声明接口?
interface IMainHelper {
//...
}
class MainHelper implements IMainHelper {
//...
}
/// <reference path="./interfaces.d.ts" />
import Injector from "./injector";
let mainHelper: IMainHelper = Injector.injectMainHelper();
注意:如果您添加对tsconfig.json
的引用,则无需将其添加到文件中。
我刚试过,如果你有两个文件:
class MainHelper {
}
var Injector = {
injectMainHelper: function() {
return new MainHelper();
}
}
export default Injector;
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");
但在这种情况下,你将再次需要接口......