Typescript Generics - 扩展课程

时间:2015-05-14 01:06:25

标签: generics typescript

例如,我有以下课程:

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> {

    }
}

所以,在我看来,这表示&#34;属性控制器扩展了基本控制器。因此,属性控制器应该具有this.$scopethis.$scope应该是IPropertiesScope类型,因为泛型类型S继承了IPropertiesScope接口`。&#34;

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

1 个答案:

答案 0 :(得分:1)

  

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

这是因为角度的默认依赖注入工作方式。即使你知道构造函数参数TypeScript知道构造函数参数,所有角度都会看到in code

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

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

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

或者在班级https://www.youtube.com/watch?v=WdtVn_8K17E

上有明确的static $inject成员