Javascript Typescript—自己的类的类型定义,而不导入它们

Javascript Typescript—自己的类的类型定义,而不导入它们,javascript,types,typescript,Javascript,Types,Typescript,我将依赖项注入与typescript一起使用,这意味着我可以在模块中创建一个对象,而无需导入类(我将导入一个注入器,它为我提供了所需的对象实例)。如果我现在想为接收变量提供一个类型,我会得到一个未解析类型错误。有什么好的解决办法吗 示例 Injector.injectMainHelper()返回类型为“MainHelper”的对象但是当前模块不知道该类型,因为我没有导入MainHelper(我不想导入它) 您可以查看完整的代码。声明接口如何 d.d.ts接口 main_.ts 其他文件.ts t

我将依赖项注入与typescript一起使用,这意味着我可以在模块中创建一个对象,而无需导入类(我将导入一个注入器,它为我提供了所需的对象实例)。如果我现在想为接收变量提供一个类型,我会得到一个
未解析类型
错误。有什么好的解决办法吗

示例

Injector.injectMainHelper()返回类型为“MainHelper”的对象
但是当前模块不知道该类型,因为我没有导入
MainHelper
(我不想导入它)


您可以查看完整的代码。

声明接口如何

d.d.ts接口 main_.ts 其他文件.ts test2.ts TypeScript能够推断
mainHelper
的类型。如果不添加类型,编译器将自动检测其类型

如果您有更通用的内容,如:

var Injector = {
    injectSomething: function(somethingID) {
        // find something and dependencies
        return new Something(..dependencies);
    }
}
解决方案是使用泛型:

let mainHelper = Injector.injectSomething<MainHelper>("mainHelperID");
让mainheloper=Injector.injectSomething(“mainheloperid”);

但在这种情况下,您将再次需要接口…

您使用的是哪个IoC容器?角度2?不,我只是想找点乐子。因此,没有容器或框架。我已经在容器上工作了一段时间,现在您可以在上查看它。我建议您阅读第二点,解释您在这里遇到的问题以及为什么需要接口。@owerreload谢谢。我已经试过了,在我看来这太神奇了。别误会我的意思,我不想说它不好,它只是增加了另一层复杂性。谢谢你给我指点这个博客,我会看看的。我想一切都可以归结为到处使用接口。没问题!你做的是对的,如果你不完全知道发生了什么,那么“使用魔法”是不好的。谢谢你的回答。你能添加定义文件吗?定义文件是
interfaces.d.ts
Foo,对不起。。。。今天工作了8个小时,我的脑子里全是泥……:)。好的,这也有助于不依赖于具体,而是抽象。我会把它纳入我的项目,并向你汇报。谢谢,我工作了。非常感谢你。
class MainHelper implements IMainHelper {
    //... 
}
/// <reference path="./interfaces.d.ts" />

import Injector from "./injector";

let mainHelper: IMainHelper = Injector.injectMainHelper();
class MainHelper {

}

var Injector = {
    injectMainHelper: function() {
        return new MainHelper();
    }
}

export default Injector;
import Injector from "./test1";

let mainHelper = Injector.injectMainHelper(); // mainHelper is MainHelper
var Injector = {
    injectSomething: function(somethingID) {
        // find something and dependencies
        return new Something(..dependencies);
    }
}
let mainHelper = Injector.injectSomething<MainHelper>("mainHelperID");