Typescript - 自己的类的定义,而不导入它们

时间:2016-05-30 14:43:16

标签: javascript types typescript

我使用了typescript的依赖注入,意味着我可以在不导入类的情况下在模块中创建一个对象(我导入一个Injector而不是我需要的对象实例)。如果我现在想要为接收变量提供类型,则会出现Unresolved type错误。对此有什么好的解决方案吗?

示例

类型' MainHelper'由Injector.injectMainHelper();返回,但当前模块未知该类型,因为我还没有导入MainHelper(我不想导入它)。

let mainHelper:MainHelper = Injector.injectMainHelper();

您可以查看完整代码here

1 个答案:

答案 0 :(得分:1)

如何声明接口?

interfaces.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");

但在这种情况下,你将再次需要接口......