注入类的静态函数“不存在”

时间:2016-06-17 20:37:31

标签: angularjs typescript

我用一堆静态实用函数设置了一个类。

// utils.ts
class Utils {
    public static blank(anything) {
        if (_.isNil(anything) || anything === "") {
            return true;
        }
        return false;
    };

    // ...
}

window.Utils = Utils;

我将此作为常量注入我的角度应用程序:

angular.module("myApp", []).constant("Utils", window.Utils);

然后我可以在我的控制器或提供者中使用它:

class MyCtrl {
    constructor(private $scope, private Utils: Utils, private MyService: MyService) { }

    // ...
}

angular.module("myApp").controller("MyCtrl", MyCtrl);

然而,当我编译时,我得到了这个错误:

javascripts/admin/controllers/my_ctrl.ts(6,29): error TS2339:
Property 'blank' does not exist on type 'Utils'.

如何在将角色控制器中的常量注入角度控制器时,如何获得有关静态方法的正确类型信息?

1 个答案:

答案 0 :(得分:0)

正确的注入private Utils类型不是Utils,这意味着类Utils的实例化实例。

正确的类型是typeof Utils,它告诉TypeScript private Utils是类本身(或者更确切地说,类似于Utils类的东西),而不是班级的实例。

您还需要为类型 Utils或参数 Utils使用其他名称。为TypeScripts typeof传递的一元表达式将在其范围中包含参数,因此只需将:Utils更改为:typeof Utils将导致有关循环引用的错误。

这样的事情可以解决问题

constructor(private $scope, private Utils: typeof window.Utils, private MyService: MyService){ }