const count: number =123;const firstName: string ="zhangsan";classPerson{}const student:{ name: string; age: number }={ name:"zhangsan", age:20};const numbers: number[]=[1,2,3];const Jack: Person =newPerson();const getTotal:()=>number=()=>{return123;};
type annotation 類型註解, 我們來告訴 TS 變量是什麼類型。type inference 類型推斷, TS 會自動的去嘗試分析變量的類型。如果 TS 能夠自動分析變量類型,我們就什麼也不需要做了。如果 TS 無法分析變量類型的話,我們就需要使用類型註解。當 firstNumber 和 secondNumber 的值爲 1 和 2 的時候,TS 已經做了類型推斷,可以知道是 Number 類型,所以 total 也是 Number 類型。any 類型,允許在編譯時可選擇地包含或移除類型檢查。如果不加類型註解,first 和 last 就會顯示 any, 不知道變量是什麼類型,加類型註解,first 和 last 就會顯示 number,最後 getTotal2 傳入值後,tot 也是 Number。對於 obj 對象,TS 也做了類型推斷,name 是 String 類型,age 是 Number 類型,代碼如下所示:
let countInference =123;const firstNumber =1;const secondNumber =2;const total = firstNumber + secondNumber;functiongetTotal2(first: number, last: number){return first + last;}const tot =getTotal2(1,2);const obj ={
name:"Jack",
age:18,};
在函數相關類型中,在給函數的參數做了類型註解以後,對於函數的返回值也要做一層約束,加上類型註解。void 類型像是與 any 類型相反,它表示沒有任何類型,只能爲它賦予 undefined和 null。類型爲 void 時,定義 sayHello() 函數爲空,沒有返回值,不能 return,如果有返回值就會報錯。never類型表示的是那些永不存在的值的類型,是任何類型的子類型,也可以賦值給任何類型。類型爲 never 時,定義 errorEmitter() 函數永遠不可能執行到最後一步。在多個參數的函數中進行解構賦值,需要以對象的形式,並且進行參數的類型註解以及函數返回值的類型註解。對於單個參數的函數中進行解構賦值,同樣進行類型註解,代碼如下所示:
functionadd(first: number, last: number): number {return first + last;}const total2 =add(1,2);functionsayHello():void{
console.log("hello");}functionerrorEmitter(): never {thrownewError()
console.log(123)}functionadd2({ first, second }:{ first: number; second: number }): number {return first + second;}functiongetNumber({ first }:{ first: number }){return first;}const total3 =add2({ first:1, second:2});const count3 =getNumber({ first:1});
三、Typescript 的數組、元組和接口
TypeScript 像 JavaScript 一樣可以操作數組元素,它有兩種方式可以定義數組。第一種,可以在元素類型後面接上 [],表示由此類型元素組成的一個數組。第二種,可以使用數組泛型,Array<元素類型>。對於數組,基礎類型,後面需要跟上 [] 以及它前面的數組的類型註解。對於數組,對象類型,可以使用 type alias 類型別名,後面需要跟上 [] 以及它前面的別名的類型註解,代碼如下所示:
const arr:(number | string)[]=[1,2,3];const stringArr: string[]=["1","2","3"];const undefindArr: undefined[]=[undefined];
type User ={ name: string; age: number };const objectArr: User[]=[{ name:"zhangsan", age:21}];classTeacher{
name: string;
age: number;}const objectArr2: Teacher[]=[newTeacher(),{ name:"zhangsan", age:21}];