2017-06-14 166 views
2

這種事情現在發生在我身上多次,所以我想問我是否做錯了什麼或者Typescript/Angular真的不這樣做。根據我的理解,最大的優勢之一是變量,參數等的類型聲明(接口)。Typescript/Angular Type聲明沒用?

今天,我有這個問題:

一個簡單的開關按鈕:

<p-selectButton [options]="posLayouts" (onChange)="handle($event)" [(ngModel)]="pageSize"></p-selectButton> 

的變量:

pageSize: number; 

    posLayouts: SelectItem[]; 

    //On mistake I setted the value here as a string 
    this.posLayouts.push({label:'1 Woche', value: '1'}); 
    this.posLayouts.push({label:'3 Wochen', value: '3'}); 

在更改功能我僅僅是調用另一個函數的值超出posLayouts。

handle(e){getPager(this.pageSize)} 
    getPager(pageSize: number = 3){ 
    let totalPages: number; 
    totalPages = 23 + pageSize -1 
    console.log(totalPages) 
} 

console.log()返回比eiter 230或232而不是所需的23或25.它將pageSize作爲字符串。這種類型的錯誤很難找到,這次我有運氣,因爲它很容易找到... 沒有Angular或tslint或我的編輯器告訴我,我不能在一個數字變量中存儲字符串。

爲了我的理解,typescript應該檢查兼容性,還是Angular以某種方式禁用了這裏的監聽?或者我做錯了什麼?

回答

1

TypeScript類型僅用於開發工具(linter,autocompletion,...)。
對於運行時,所有代碼都轉換爲JavaScript,並且沒有可用的類型信息。
因此,對於用戶輸入或代碼之外的其他數據源,您需要確保自己的數據符合您期望的類型。

+0

恩,這不是我想聽的,但謝謝。所以用戶輸入仍然需要由我自己進行類型檢查。 – Doomenik

+0

是的,類型僅用於開發和構建過程(更高效的樹狀抖動)。如果他們會在生成的JS代碼中隨處進行類型檢查,那麼性能影響會太高。 –