Angularjs 如何使用typescript定义事件?

Angularjs 如何使用typescript定义事件?,angularjs,typescript,Angularjs,Typescript,我正在使用angular1.5和typescript。我试着按照托德的格言风格指南 我有两个组件:应用程序(statefull)及其子项管理对话框 应用程序包含事件列表 “管理”对话框是更改所有选定事件的时间属性(小时和分钟)的窗体 更改作为事件传回 controller: class ManageDialog { public evts:Array<Event>; save() { this.onEdited({$event:{h:this.h,m:this.m}

我正在使用angular1.5和typescript。我试着按照托德的格言风格指南

我有两个组件:应用程序(statefull)及其子项管理对话框

应用程序包含事件列表

“管理”对话框是更改所有选定事件的时间属性(小时和分钟)的窗体

更改作为事件传回

controller: class ManageDialog {
  public evts:Array<Event>;

  save() {
    this.onEdited({$event:{h:this.h,m:this.m}});//i guess this is not correct in typescript
  }
}
控制器:类管理对话框{
公共EVT:阵列;
保存(){
this.oneedid({$event:{h:this.h,m:this.m}});//我想这在typescript中是不正确的
}
}
既然我在写typescript,我是否应该为事件内部推送的对象(可能是接口)定义一些特殊类型

或者正确的做法是为事件本身定义类型

(我有很多“批量”表单,它们应该编辑不同的属性——那么定义大量类型是否正确?)


这说明了我的问题

从技术上讲,我认为这是正确的。您正在使用TypeScript来使用类型,所以请使用它们——特别是当您在代码中有很多地方使用它们时(如事件对象)

不过,我会小心,不要过火。我不想为我使用的每一个对象创建一个对象类型(接口)——这会让人很快厌倦


这不是像Java这样的语言所采用的“严格类型化”方法(一切都是一种类型),而是介于类型安全性和健全性之间的一种中间立场:)

从技术上讲,我认为这是正确的。您正在使用TypeScript来使用类型,所以请使用它们——特别是当您在代码中有很多地方使用它们时(如事件对象)

不过,我会小心,不要过火。我不想为我使用的每一个对象创建一个对象类型(接口)——这会让人很快厌倦


这不是像Java这样的语言所采用的“严格类型化”方法(一切都是一种类型),而是类型安全性和健全性之间的一种中间立场:)

我会将数据与事件本身分开,并使用泛型

该事件可以是一个泛型类,它有一个名为“data”的成员和类型参数,然后该数据可以传递


p、 s拖放事件在javascript中使用这种方法(当然,不是typescript这一通用部分)。

我将把数据与事件本身分开,并使用泛型

该事件可以是一个泛型类,它有一个名为“data”的成员和类型参数,然后该数据可以传递


p、 s拖放事件在javascript中使用了这种方法(不是typescript这一通用部分)。

我认为Sefi Ninio提出了一个很好的观点。如果您坚持要打印所有内容,则可以使用以下表格:

class ItemsInEvent {
      constructor(public item:string){}
}
class BindedEvent {
      constructor(public $event:ItemsInEvent){}
}
// Inside your controller:
export class MyCtrl {
       public bindedEvent: (BindedEvent)=>void;//Declare the bound method 
       public someMethod():void {
              let myBindedItem:ItemsInEvent = new ItemsInEvent ("foo");
              let myBindedEvent:BindedEvent = new BindedEvent (myBindedItem);
              // Trigger event
              this.bindedEvent(myBindedEvent);
       }
}
// Component definition:
export class MyComponent implements IComponentOptions {
       bindings: {
               bindedEvent: '&'
       }
}

我认为Sefi Ninio提出了一个很好的观点。如果您坚持要打印所有内容,则可以使用以下表格:

class ItemsInEvent {
      constructor(public item:string){}
}
class BindedEvent {
      constructor(public $event:ItemsInEvent){}
}
// Inside your controller:
export class MyCtrl {
       public bindedEvent: (BindedEvent)=>void;//Declare the bound method 
       public someMethod():void {
              let myBindedItem:ItemsInEvent = new ItemsInEvent ("foo");
              let myBindedEvent:BindedEvent = new BindedEvent (myBindedItem);
              // Trigger event
              this.bindedEvent(myBindedEvent);
       }
}
// Component definition:
export class MyComponent implements IComponentOptions {
       bindings: {
               bindedEvent: '&'
       }
}