1. js的靈活性,對小專案而言非常好,但是對於大的專案而言,如果沒有變數型別檢查,隨著變數型別的數量成倍的增加,你總有記錯、遺漏的時候
2. 要解決靈活性帶來的隱患,我們需要的是型別。更準確的說,是專案開發時的型別檢查能力。
3. TS由三個部分組成:型別、語法與工程。
4. TS內建了一批型別工具
5、TS會在構建時被抹除型別程式碼與語法的降級。這一能力是透過TypeScript Complier(tsc)實現的。tsc以及tsc配置(TSConfig)是ts工程層面的重要部分。
6、null與undefined型別,在ts裡面,在沒有開啟strictNullChecks檢查時,會被視作其他型別的子型別
7、在js裡面void是一個運算子,會執行後面跟著的表示式,並返回undefined。在ts的原始型別標註中也有void,這裡得void用於描述一個內部沒有return語句,或者沒有顯示return一個值的函式的返回值。
// 下面這兩個的返回值型別都是void
function func1() {} function func2() { return; }
// 下面的返回值是undefined function func3() { return undefined; }
雖然func3的返回值型別會被推導為undefined,但是你仍然可以使用void型別進行標註,因為在型別層面func1、func2、func3都表示一個“沒有返回一個有意義的值”
需要特別注意的是,如果變數、物件方法、函式引數是一個返回值為void型別的函式,那麼並不代表不能賦值為有返回值的函式。
type voidFunc = () => void; const f:voidFunc = () => { return 123; };
這裡的void型別只是表示該函式的返回值沒有利用價值
8、元組就是確定好陣列型別的每一個值,並且是定長的。作用是基於位置的型別標註、避免出現越界訪問。嚴謹性就是TS的一個特點,特別是提升資料的嚴謹性。
9、具名元組,神奇的玩樣兒。下面這麼寫
const arr7: [name: string, age: number, male: boolean] = ['linbudu', 599, true];
10、TS的型別宣告是可選的,你可以加,也可以不加。即使不加型別宣告,依然是有效的TS程式碼,只是這時不能保證TS會正確推斷出型別
11、js的執行環境(瀏覽器和Node.js)不認識TS程式碼。TS轉為JS程式碼的過程叫做編譯(compile)。TS的型別檢查只是編譯時的型別檢查
12、TS專案裡面,有值程式碼和型別程式碼的區分。
13、變數型別一旦被設定為any,TS實際上會關閉這個變數的型別檢查。用var和let宣告的變數,即使不賦值,也會被推導為any型別。但是用const宣告的不行,因為js規定const宣告變數時,必須同時有初始值
14、any有一個汙染問題。any型別賦值給其他型別的變數時,會導致出錯,在運算的時候TS檢查不出問題,只有在執行的時候才會報錯。