# 靜/動態語言,強/弱型別 >Editor: Jung ## 動態語言(Dynamically Typed) VS 靜態語言(Statically Typed) :::info **動態語言**: - 動態語言的特色為: 在**程式運行**的狀態下,也就是在英文文章裡面會看到的Run-time期間,任何變數是經由被帶入值來判斷其型別;也就是說,**變數的型別會依據存的值本身來判斷**。 **靜態語言**: - 靜態語言的特色為: 在**程式正在編譯時**,也就是所謂的Compilation期間,根據程式裡宣告的型別(幾乎都是用文字來表示,如 Int、Float 等)來監控型別的狀態。 ::: ## 漸進式型別系統(Gradual Typing) :::info - 兼具動態與靜態語言的特性-程式碼在編譯過程中可能會遇到變數或表達式(Expression)被顯性地型別註記,這些變數會在靜態的編譯過程中檢測並且被監控;**某些沒有被註記型別的變數或表達式等,會在程式裡自行推斷(Inference)型別之結果**,如果遇到型別對應錯誤時釋放警告。 ::: ## TypeScript 漸進式型別系統 ### 型別註記(Type Annotation) 與 型別推論(Type Inference) :::info **型別註記**: - 為對變數或表達式進行**文字敘述上的型別宣告動作**。 **型別推論**: - **變數根據被賦予的值之型別來代表該變數之型別**;而表達式則是**經運算結果的值之型別來代表整個表達式最後的型別結果**。簡而言之,撇除掉已經被註記過後的東西,決定其他沒有被註記過後的東西之型別就是看結果的型別決定是什麼就對了。 ::: ## 強行別語言(Strongly Typed) VS 弱型別語言 (Weakly Typed) :::info **弱型別語言**: - 弱型別語言對於任意型別的值之間的操作時,會自動轉換成適當的型別的值進行操作。 **強行別語言**: - 不允許不符合預期的型別的值進行操作。例如在Python或Ruby裡隨意將非數字型別的值與另一個數值進行加減乘除。 ::: ###### tags: `TypeScript`