2016-04-07 16 views
0

私は少し明確に探しています。ここなぜ関数型パラメータの型定義は変換を実行しません

toggleWorker(stsID: number): void { 
    // get status object by selected staus ID 
    let cStatus: Status = this.stsList.filter((s: Status) => s.StatusID === stsID)[0]; 
    // if status requires a worker to be assigned then toggle requireWorker 
    if (cStatus.RequireWorker) { 
     this.requireWorker = true; 
    } else if (!cStatus.RequireWorker) { 
     this.requireWorker = false; 
    } 
} 

は、HTMLの宣言です:

<div class="large-3 columns"> 
     <label >Trade Status 
      <select id="StatusID" 
       [(ngModel)]="currentTrade.StatusID" 
       [ngFormControl]="shiftForm.controls['StatusID']" 
       (change)="toggleWorker($event.target.value)" > 
       <option *ngFor="#sts of stsList" value="{{sts.StatusID}}" 
        >{{sts.Title}}</option> 
      </select> 
     </label> 
    </div> 

私はtypescriptです(私は1.7を使用しています)選択オプション/ htmlの中にドロップダウンの変更イベントに結び付けられている機能を持っています

export class Status { 

StatusID: number; 
PortalID: number; 
Title: string; 
Code: string; 
RequireWorker: boolean; 

constructor(obj?: any) { 
    this.StatusID = obj && obj.StatusID || 0; 
    this.PortalID = obj && obj.PortalID || 0; 
    this.Title = obj && obj.Title || null; 
    this.Code = obj && obj.Code || null; 
    this.RequireWorker = obj && obj.RequireWorker || false; 
} 

}

I:ここにあなたがStatusIDは、タイプ番号があることを確認できるように、ステータスオブジェクトのクラスがありますsample fiddleがあります。これは完全に動作します。

しかし、これを私のangular2アプリケーションで使用しようとしたとき、関数のパラメータの型を明示的に変換しない限り、機能しませんでした。

let cStatus: Status = this.stsList.filter((s: Status) => s.StatusID === Number(stsID))[0]; 

お知らせ番号(stsID)

質問の追加: 誰かが私がここで何が起こっているか理解するのを助けることができる、以下の変更を参照してください。関数型パラメータの型宣言は内部型チェックのためだけで、その型への変換を行うと仮定しました。

私はそれが理にかなっていると思います。

おかげ

答えて

1

あなたはタイプを想定したよう静的型チェックのためにのみです。コンバージョンは起こりません。明示的に変換する必要があります。

type castingまた、値のタイプが特定のタイプであると仮定することができますが、実際にそのタイプでない場合は値を変換しないことを表現しています。

+0

このような状況でタイプ変換のベストプラクティスは何ですか?すべてのパラメータの関数の最初のステップとして関数のパラメータを変換しようとしていますか? –

+1

私はhttp://stackoverflow.com/questions/31879497/angular2-radio-button-bindingや変換を行うゲッタ/セッタに示すようにカスタムのControlValueAccessorを作成すると思います。 –

関連する問題