【问题标题】:Typescript Generics - Extending a classTypescript 泛型 - 扩展一个类
【发布时间】:2015-05-14 01:06:24
【问题描述】:

例如,我有以下课程:

module app.components.base {
    export class BaseController<S extends IAppScope, A> {
        public data:string;

        constructor(public $scope: S, public service: A, public $state: ng.ui.IStateService, public $ionicHistory) {
            console.log('Base Controller Loaded!');
            console.log($scope);
            $scope.vm = this;
        }
    }
}

然后我有这个单独的类:

module app.components.properties {

    export class PropertiesController extends base.BaseController<IPropertiesScope, app.services.PropertyService> {

    }
}

所以,在我看来,这是说“属性控制器扩展了基本控制器。因此,属性控制器应该有this.$scope,并且this.$scope 应该是IPropertiesScope 类型,因为泛型类型S 继承了IPropertiesScope接口`。”

但是,$scope 在我的基类的构造函数中未定义。为什么这个值未定义?

【问题讨论】:

    标签: generics typescript


    【解决方案1】:

    $scope 在我的基类的构造函数中未定义。为什么这个值未定义?

    这是因为 Angular 的默认依赖注入的工作方式。即使你知道构造函数参数并且TypeScript 知道构造函数参数,但 Angular 所看到的只是in code

    function PropertiesController() {
       _super.apply(this, arguments);
    }
    

    您可以看到 TypeScript 可以很好地传递参数,但是 angular 会看到 PropertiesController() 并且不会依赖注入任何东西

    修复:有一个显式构造函数

    或者在类 https://www.youtube.com/watch?v=WdtVn_8K17E 上有一个显式的 static $inject 成员

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-12
      • 2021-03-25
      • 2015-04-01
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多