为什么定义函数参数类型不执行转换

时间:2016-04-07 15:41:20

标签: typescript angular

我正在寻找一点清晰度。我有一个打字稿(我使用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)

问题: 有人可以帮我理解这里发生了什么。函数参数的类型声明仅用于内部类型检查,我假设它将执行到该类型的转换。

我希望这是有道理的。

由于

1 个答案:

答案 0 :(得分:1)

假设类型仅用于静态类型检查。没有转换。您需要明确转换。

还有type casting表示类型检查可以假定某个值属于某种类型,但如果该值实际上不属于该类型,则也不会转换该值。