【发布时间】:2016-07-28 14:55:42
【问题描述】:
我正在寻找一点清晰。我有一个打字稿(我使用的是 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];
注意添加了Number(stsID)
问题: 有人可以帮助我了解这里发生了什么。函数参数的类型声明是否仅用于内部类型检查,我假设它会执行到该类型的转换。
我希望这是有道理的。
谢谢
【问题讨论】:
标签: typescript angular