【问题标题】:why does defining type of function parameters not perform conversion为什么定义函数参数的类型不执行转换
【发布时间】: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


    【解决方案1】:

    您假设类型仅用于静态类型检查。没有进行转换。您需要显式转换。

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

    【讨论】:

    • 谢谢,那么在这种情况下类型转换的最佳做法是什么?您是否尝试将函数参数转换为所有参数的函数的第一步?
    • 我想我会创建一个自定义 ControlValueAccessor,如 stackoverflow.com/questions/31879497/… 中所示,或者一个执行转换的 getter/setter。
    猜你喜欢
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 2014-08-10
    • 2015-08-21
    • 2022-01-17
    相关资源
    最近更新 更多