在构造函数之外扩展属性表单

时间:2012-12-11 16:09:01

标签: typescript

让我说我有这样的事情:

interface Scope extends ng.Scope {
   getMeSome(id:string):number[];
}
export class AwesomeController {
    constructor (public $scope:Scope) {
       $scope.getMeSome = id => this.getMeSome(id);
    }
    getMeSome(id:string){
      console.log('Alright... alright... here it is'); 
    }
}

现在你可以看到我在3个不同的地方有相同的方法签名。当然我可以把它剪掉一点然后在那里做 - 在构造函数中:

constructor (public $scope:Scope) {
   $scope.getMeSome = id => {
      console.log('Alright... alright... here it is'); 
   };
}

但这样会使构造函数的身体像使用类固醇一样(如果你有几十种不同的方法)。 所以我想知道为什么我不能做那样的事情:

export class AwesomeController {
   constructor (public $scope:Scope) { }

   $scope.getMeSome(id:string) { // Can't extend $scope here, although I can do that in the constructor
      console.log('Alright... alright... here it is'); 
   }
}

为什么这不起作用?有什么建议让它更性感吗?

1 个答案:

答案 0 :(得分:2)

据我所知,在类中(与模块不同),你是定义类,而不是运行类,所以你不能这样做类中的任何赋值(与方法体相对)。所以这种语法不起作用:

export class AwesomeController {
    constructor (public $scope:Scope) {}
    $scope.getMeSome = id => {
      console.log('Alright... alright... here it is'); 
    }
}

你也只是定义了这个类的方法,而不是其他类的方法,所以你上面的语法也不起作用,因为它正在捣乱另一个类的方法在您希望定义自己的地方:

export class AwesomeController {
    constructor (public $scope:Scope) {}
    $scope.getMeSome(id:string) => {
      console.log('Alright... alright... here it is'); 
    }
}

我认为你必须要做的就是你提出的前两种方法之一 - 这对我来说都很好。