我正在寻找一点清晰度。我有一个打字稿(我使用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)
问题: 有人可以帮我理解这里发生了什么。函数参数的类型声明仅用于内部类型检查,我假设它将执行到该类型的转换。
我希望这是有道理的。
由于
答案 0 :(得分:1)
假设类型仅用于静态类型检查。没有转换。您需要明确转换。
还有type casting表示类型检查可以假定某个值属于某种类型,但如果该值实际上不属于该类型,则也不会转换该值。