2017-03-01 3 views
0

私はtypescriptでangular1.5を使用しています。私は約one-way-dataflowtypescriptでイベントを定義する方法は?

私は2つのコンポーネントを持っているトッド・モットースタイルガイドに従うことをしようとしている:アプリ(ステートフル)とその子管理-ダイアログ

アプリはイベント

のリストが含まれています管理し-dialogは、選択したすべてのイベントの時間プロパティ(時間と分)を変更するフォームです。

変更はイベントとして返されます。

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

私はtypescriptですが書いているので - 私は、オブジェクトのためのいくつかの特別なタイプは(インターフェースであってもよい)イベントの内側に押し込ん定義する必要がありますか?

イベント自体の型を定義するのが正しいかもしれませんか?私はそれがあると思い、話す私の問題

答えて

1

技術を実証 - (それは種類の多くを定義するために正しいです、私は別のプロパティを編集する必要があり、「バルク」形態の多くを持って?)

plnkr

正しい。型の使用にはTypeScriptを使用していますので、特にEventオブジェクトのようなコードを使用するコードの場所が多い場合は、それらを使用してください。

しかし、船外には行かないように注意してください。私は使用するオブジェクトごとにオブジェクトタイプ(インターフェイス)を作成したくないです。これは面倒な作業です。

それは私がからデータを分けるだろうJavaのような言語で採択された「厳密に型指定された」アプローチ(すべてがタイプです)が、型の安全性と健全性の中間地面の種類:)

0

ではありませんイベント自体とジェネリックを使用してください。

イベントは、typeパラメータを持つ "data"という名前のメンバを持つ汎用クラスで、データが渡すことができます。

p.sドラッグイベントのドロップイベントでは、このアプローチをJavaScriptで使用しています(よくタイプスクリプトではない一般的な部分ではありません)。

2

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: '&' 
     } 
} 
関連する問題