javascript - Typescript - 为自己的类进行类型定义而不导入它们

标签 javascript types typescript

我正在使用 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/

相关文章:

Haskell:从类型推导出函数

haskell - 使用 TypeFamilies 派生实例

javascript - 滚动进度条隐藏文字内容

java - 无法解析为类型(jsp + eclipse)

扩展面板标题内的 Angular Material 复选框 : how to allow the checkbox to be activated with the keyboard?

typescript - Openlayers 4 - 加载 WMS 图像层需要身份验证

javascript - 如何观察整个 session 的游戏统计数据?

javascript - 使用 Javascript 在 MouseOver 上的其他元素之上显示 Html 元素

javascript - 计时器不会停止在 00 :00

javascript - meteor :图像的预加载