最近在用TypeScript(后面簡稱TS),發現TS雖然語法和C#差不多但是在很多地方還是不夠高級(和C#相比),這里主要聚焦在數據類型強轉上面,直接看下面案例吧
string轉number
案例如下
let i: number = 0; console.log(typeof i); let k: string = '123'; console.log(typeof k); i = +k; console.log(typeof i,typeof k); console.log(i);
上面代碼執行結果是
number
string
number string
123
** 自定義類型如何強轉? **
查了下TypeScript里數據類型強轉是通過以下方式:
let yy: any = '111'; console.log('yy數據類型為:', typeof (yy)); let kk: number = <number>yy; console.log('yy數據類型為:', typeof (yy), 'kk數據類型為:', typeof(kk));
代碼結果是:"yy數據類型為: string"
“yy數據類型為: string kk數據類型為: string”
需要說明的是代碼中變量yy必須申明為any類型,否則編譯器會提示語法錯誤。由此我得知的結論是TS的強轉前提是需強轉的對象數據類型必須為any。 那么TS的強制轉換只有這一個前提么? 繼續看下面代碼:
console.log('begindate格式化前的類型', typeof ($(this.BeginDateDatePicker.nativeElement).data('DateTimePicker').date())); console.log('begindate格式化后的類型:', typeof ($(this.BeginDateDatePicker.nativeElement).data('DateTimePicker').date().format('L'))); let y = <moment.Moment>($(this.BeginDateDatePicker.nativeElement).data('DateTimePicker').date().format('L')); console.log('begindate式化后后再轉換后的類型:', typeof (y));
上面代碼中用到了頁面中的日期input的值,也引用了Moment插件(官網:http://momentjs.cn/)。
代碼需求是要將input的日期格式化為"yyyy-MM-dd"格式。上面的代碼可以編譯通過,雖然需轉換類型的日期值對象當前數據類型為string(不為any),但是編譯器還是通過了。我們來看最終執行結果:
結果如下:
begindate格式化前的類型 object
begindate格式化后的類型: string
begindate式化后后再轉換后的類型: string
結論
上面代碼的執行結果可知,TS內置數據類型強轉方式是建立在TS內置的數據類型基礎上 我們自定義數據類型或是第三方插件的數據類型如需強轉需要自己實現。 同時,對內置數據類型強轉也需遵循TS自身的語法要求。
最后還是通過momentjs官網的強轉方式將string對象轉換成了moment.Moment類型對象。最終代碼如下:
createOrEditInput.luckDrawActivitySetting.beginDate =
moment($(this.BeginDateDatePicker.nativeElement) .data('DateTimePicker').date().format('L')); createOrEditInput.luckDrawActivitySetting.endDate = moment($(this.EndDateDatePicker.nativeElement) .data('Da