1. 程式人生 > >TypeScript : 語法及特性

TypeScript : 語法及特性

當let宣告一個變數的時候它使用的詞法作用域或者是塊作用域。塊作用域指的就是他們包含的塊以外的不能訪問。

const宣告:是let宣告有相同的作用域規則,但是它被賦值後不能再被改變。類似於java的final

TypeScript 可以用 `` 來宣告多行字串,編譯之後js檔案換行的地方會加上\n

在` ` 裡面可以用 ${xxx變數/方法} 這種格式加入變數或方法,稱為字串模板.感覺就像普通語言中的print函式一樣

TypeScript引入了型別的概念,如 var name: string = "haha"; 變數名name後面跟冒號後面加上變數型別,如果再把name賦一個
數字型別的值,那麼會報錯,但是生成的js檔案依然沒有問題.宣告為any可以存放任何型別

方法之後也可以跟返回值的型別, 如 function test() : string { return:";" } 那麼只能返回string型別.

可以自定義資料型別,用 class關鍵字 ,如 class Person {name: string; age: number;} 就聲明瞭一個一個Person類,裡面有
string型別的name 和 number型別的age. 建立一個Person 物件用 var zhangsan:Person = new Person();
zhangsan.name = "";用這種方式賦值.

函式可選引數如:function test(a = "haha": string, b?: string) : void {} b後面加?表示可選引數,a是有預設值的引數,
可選引數必須宣告在必選引數後面.

可以用 function test(...args) 這種方法給函式傳不定長引數,args是一個數組.

ES6 支援 yield 需要在函式宣告之後加上* , 如 function* test(){ }, 裡面在返回處用 yield關鍵字,如果 yield後面有語句
如 yield Math.random(); 那麼可以建立一個物件,用 物件.next().value() 接收這個值.

析構表示式,如,一個函式返回一個物件 {name:"haha", age:18} ,那麼可以這樣接收 var {name, age} = 函式();
如果接收名和傳過來的名字不一樣,可以加上 var {name: namex, age} = 函式(); 這樣表示接收name引數的值儲存在namex變數裡面, 還可以巢狀表示式, 如果傳回來的物件,其中一個屬性又是一個物件,那麼可以這樣:var {name:{firstname:haha}} = 函式()
表示把返回的物件的name物件的firstname屬性取出來存到haha變數裡面.

析構表示式如果想要接收陣列,那麼可以這樣: var [num1, num2, ...args] = array1; 表示 num1變數接收 array1[0] 的值,
num2 是 array1[1] ,剩下的全部放到args數組裡面去. 析構表示式也可以作為方法的引數.

箭頭表示式,類似於lambda表示式,是用js匿名函式實現的, 如 var sum = (num1=123, num2=321) => num1 + num2;執行sum(),就會
返回語句的執行結果.一般用他來解決js中this關鍵字的問題.看起來像把 function(){ } 替換為 () =>{ } ,注意如果匿名函式多行的話後面的語句要加在花括號中.

for (var n of array1) { } 新的迴圈方式:for of 會忽略掉陣列的屬性,並且迴圈取到的n是數組裡面的值.還可以迴圈字串.

類的訪問控制符有三個 public private protected,預設是public

類的構造方法: constructor(public name:string){ } 宣告構造方法,同時宣告一個name屬性,在例項化的時候可以直接賦值.注意,
如果這樣的話,必須要在屬性上加訪問控制符.子類 extends繼承父類時,必須要在建構函式裡面呼叫父類建構函式,super();
獲取類的屬性且不確定變數名的時候用 類名[變數名] 這種方法 不能用 類名.屬性名

TypeScript也有泛型的概念,如: var array1: Array<Person> = []; 這個數組裡面只能存放Person類和它的子類.

介面的定義: interface Animal { eat(); } 可以作為方法的引數型別,也可以用類 implements 實現這個介面.

export 對外開放的東西,加了export修飾符,那麼別的檔案就可以 import { xxx } from "./xxxx" 匯入.

型別定義檔案以 .d.ts結尾,如想用jquery庫,可以下載一個jquery的型別定義檔案,就可以在ts檔案中使用jquery.