0
我在尋找一點清晰度。我有一個打字稿(我使用的是1.7),它綁在選擇選項的變化事件功能的HTML /下拉:爲什麼定義類型的函數參數不執行轉換
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>
這裏是班裏的狀態對象,所以你可以看到,StatusID是一種編號:
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;
}
}
我有一個sample fiddle這裏完美的作品。
但是,當我試圖在我的angular2應用程序中使用它,它不工作,除非我明確轉換函數參數的類型。請參閱以下變化:
let cStatus: Status = this.stsList.filter((s: Status) => s.StatusID === Number(stsID))[0];
公告加入數(stsID)
問題: 有人可以幫助我理解這是怎麼回事。是函數參數的類型聲明僅用於內部類型檢查,我認爲它會執行到該類型的轉換。
我希望這是有道理的。
謝謝
謝謝,那麼在這種情況下類型轉換的最佳做法是什麼?您是否嘗試將函數參數作爲函數的第一步轉換爲所有參數? –
我想我會創建一個像http://stackoverflow.com/questions/31879497/angular2-radio-button-binding中顯示的自定義ControlValueAccessor或執行轉換的getter/setter。 –