【認真臉】TypeScript 不是強類型!只是靜態類型!

RT。。

鑒於現在很多人都沒有對類型系統形成正確理解還是稍微提醒一下。。(弱類型、強類型、動態類型、靜態類型語言的區別是什麼? - C(編程語言) - 知乎)

不知道還有沒有人不理解強/弱類型和有沒有類型標註是沒有因果性的兩件事。。

簡單證明

因為 TypeScript 是 JavaScript 的超集

所以 TypeScript 需要允許原有的 JavaScript 中允許的操作

所以 TypeScript 中仍然可以出現 JavaScript 中能夠出現的 Forbidden behaviors

又因為 JavaScript 是弱類型

所以 TypeScript 是弱類型

證畢

當然其實這個證明並不是太嚴謹,理解意思就行。。

一點提示

TypeScript 只是提前了類型檢查的時機,並沒有讓類型系統本身變得更嚴格。

一個很直接的栗子就是類型間的基本運算:

TypeScript 幾乎不限制 JavaScript 中原有的隱式類型轉換,只是能夠通過類型推導在編譯時確定結果。

BTW,tsc 的編譯器選項只是創造出了 TypeScript 的某個特定子集,並不改變語言本身(全集)的性質。

最後

強/弱類型的界定本身就留有爭議,而且其概念現在已經被大量誤用。如果不是專門強調的話,一般只說明某個語言是靜態/動態類型就足夠了,盡量慎用強/弱類型的概念。

推薦閱讀:

第3篇:「來啊,造作吧,反正有大把的內存」
宏名不能隨便起
增長黑客們都在使用什麼編程語言?
Python 2 系列壽命還剩幾年?
王垠:如何掌握所有的程序語言

TAG:TypeScript | 编程语言 |