TS:是JS的超集,即對JS的擴展,主要提供了類型系統和對ES6+的支持,但TS最終會轉換為js代碼去執行。 特點: 1. 始於JavaScript, 歸於JavaScript 2. 強大的類型系統 3. 先進的JavaScript | | TypeScript | JavaScript | | | ...
TS:是JS的超集,即對JS的擴展,主要提供了類型系統和對ES6+的支持,但TS最終會轉換為js代碼去執行。
特點:
1. 始於JavaScript, 歸於JavaScript
2. 強大的類型系統
3. 先進的JavaScript
TypeScript | JavaScript | |
---|---|---|
語言 | 面向對象編程語言 | 面向腳本編程 |
是否支持可選參數 | 支持 | 不支持 |
是否支持靜態類型 | 支持 | 不支持 |
是否支持介面 | 支持 | 不支持 |
基礎類型:
1. boolean
2. number
3. String
4. undefined和null(預設情況下null和undefined是所有類型的子類型)
5. 數組
6. 元組:表示一個已知元素數量和類型的數組,各元素的類型不必相同
7. object:表示非原始類型,也就是除number、string、boolean之外的類型
8. 枚舉:為一組數值賦予友好的名字
9. any:不清楚類型的變數指定一個類型
10. void
11. 聯合類型(Union Types) (表示取值可以為多種類型中的一種)
12. 類型斷言:可以用來手動指定一個值的類型。
13. 類型推斷:TS會在沒有明確的指定類型的時候推測出一個類型,
a. 定義變數時賦值了,推斷為對應的類型。
b. 定義變數時沒有賦值,推斷為any類型。
類:
1. 繼承: 類從基類中繼承了屬性和方法,通過 extends 實現。
2. 修飾符: public(預設)、private(不能在聲明它的類的外部訪問)、protected(子類可以訪問)。
3. 存取器: TypeScript支持通過getters/setters來截取對對象成員的訪問,它能幫助你有效的控制對對象成員的訪問。
4. 靜態屬性:靜態屬性:是類對象的屬性;非靜態屬性:是類的實例對象的屬性。
5. 抽象類: 不能被實例化,用abstract修飾。
介面:
(介面是對象的狀態(屬性)和行為(方法)的抽象(描述))核心原則之一是對值所具有的結構進行類類檢查。
1. readonly VS const: 判斷該用readonly還是const的方法是看要把它作為變數使用還是作為一個屬性。作為變數使用的話用const,若作為屬性則使用readonly。
2.類類型:實現介面
一個類可以實現多個介面
一個介面可以繼承多個介面
3. 介面也可以相互繼承
#函數類型
泛型:
指在定義函數、介面或類的時候,不預先指定具體的類型,而在使用的時候再指定具體類型的一種特性。
重載:
函數名相同,而形參不同的多個函數。
在JS中,由於弱類型的特點和形參與實參可以不匹配,是沒有函數重載這一說的,
但在TS中,與其它面向對象的語言(如Java)就存在此語法。
什麼是構造函數,其作用:
構造函數是一種特殊的方法,主要用於創建對象時初始化對象,即給對象成員屬性賦值。和new關鍵字一起使用,而TS的構造函數通過關鍵字constructor實現,並用this關鍵字來訪問當前類中的屬性和方法。
為什麼要用TS:
1. TS在編譯時就可以暴露問題,而JS則在運行時才可以發現。
2. TS作為一種強類型,明確知道數據類型,代碼的可讀性高,便於理解。
什麼是泛型:
在定義時不去指定類型,等使用時才去指定。
什麼是實例化:
一般創建一個類後並不能直接對屬性和方法進行訪問,必須對類進行實例化,需要創建一個對象。創建對象通過new關鍵字來實現,通過‘.’來訪問屬性和方法。
什麼是方法重寫:
子類可以直接繼承父類的方法,直接使用,但有時子類並不想原封不動的繼承父類中的方法,而是需要做一定的修改,就是重寫。重寫的作用在於子類可以根據需要定義自己的特定行為,即子類能夠根據需要實現父類方法。
什麼是可索引類型介面:
一般用來約束數組和對象
never和void的區別:
void表示沒有任何類型(可以賦值為null和undefined);
never表示不包含任何值,永遠沒有值;
void返回值類型的函數可以正常運行,而never的則無法執行,也無法終止,會拋出異常。