TypeScript入門筆記整理~

一、什么是TypeScript?

TypeScript 是微軟開發(fā)一款開源的編程語言,本質(zhì)上是向 JavaScript 增加靜態(tài)類型系統(tǒng)。它是 JavaScript 的超集,所有現(xiàn)有的 JavaScript 都可以不加改變就在其中使用。它是為大型軟件開發(fā)而設(shè)計(jì)的,它最終編譯產(chǎn)生 JavaScript,所以可以運(yùn)行在瀏覽器、Node.js 等等的運(yùn)行時(shí)環(huán)境。(TypeScript是Es6的超集 大概是Es7的實(shí)現(xiàn))

1.編譯型語言(js是解釋型語言)
2.強(qiáng)類型
3.真面向?qū)ο?有接口、有泛型、有枚舉、有訪問修飾符
4.它遵循AMD規(guī)范
    //AMD 是 RequireJS 在推廣過程中對模塊定義的規(guī)范化產(chǎn)出。
    //CMD 是 SeaJS 在推廣過程中對模塊定義的規(guī)范化產(chǎn)出。

typescript是不能直接運(yùn)行在瀏覽器

需要編譯:
  1.下載
    cnpm install -g typescript
  2.編譯
    tsc xxx.ts

基礎(chǔ)數(shù)據(jù)類型

  • 布爾類型(boolean)
  • 數(shù)字類型(number)
  • 字符串類型(string)
  • 數(shù)組類型(array)
  • 元組類型(tuple)
  • 枚舉類型(enum)
  • 任意值類型(any)
  • null 和 undefined
  • void 類型
  • never 類型

其中元組、枚舉、任意值、void類型和 never類型是TypeScript有別與JavaScript的特有類型。在TypeScript中聲明變量,需要加上類型聲明,例如boolean和string等。通過靜態(tài)類型約束,在編譯時(shí)執(zhí)行類型檢查,可以避免一些類型混用的低級錯(cuò)誤。

布爾類型

布爾類型是最簡單的數(shù)據(jù)類型,只有true和false兩種值。也就是說如果賦值為非boolean的其他類型值,編譯時(shí)會拋出錯(cuò)誤。

let flag: boolean = true;
flag = 1; // 報(bào)錯(cuò)

數(shù)字類型

在TyopeScript中,數(shù)字都是浮點(diǎn)型。TypeScript同時(shí)支持二進(jìn)制、八進(jìn)制、十進(jìn)制和十六進(jìn)制字面量,示例代碼如下

let binaryLiteral: number = 0b1010; // 二進(jìn)制
let octalLiteral: number = 0o744;    // 八進(jìn)制
let decLiteral: number = 6;    // 十進(jìn)制
let hexLiteral: number = 0xf00d;    // 十六進(jìn)制

字符串類型

TypeScript支持使用單引號(')或雙引號(")來表示字符串類型。還支持使用模板字符串反引號(`)來定義多行文本和內(nèi)嵌表達(dá)式。使用${ expr }的形式嵌入變量或表達(dá)式,在處理拼接字符串的時(shí)候很有用,示例如下:

let name: string = "Angular";
let years: number = 5;
let words: string = `您好,今年是 ${ name } 發(fā)布 ${ years + 1} 周年`;

數(shù)組類型

TypeScript數(shù)組的操作類似與JavaScript中數(shù)組的操作,TypeScript有兩種數(shù)組定義方式,示例代碼如下:

// 在元素類型后面加上[]
let arr: number[] = [1, 2];

// 或者使用數(shù)組泛型
let arr: Array<number> = [1, 2];

元組類型

元祖類型用來表示已知元素?cái)?shù)量和類型的數(shù)組,個(gè)元素的類型不必相同。下面定義了一組值分別為字符串和數(shù)字類型的元祖,示例代碼如下:

let x: [string, number];
x = ['Angular', 25];    // 運(yùn)行正常
x = [25, 'Angular'];    // 報(bào)錯(cuò)
console.log(x[0]);    // 輸出 Angular

枚舉類型

枚舉是一個(gè)可被命名的整型常數(shù)的集合,枚舉類型為集合成員賦予有意義的名稱,增強(qiáng)可讀性,示例代碼如下:

enum gender{
    male,
    female
}
var sex:gender;

//sex='123'//報(bào)錯(cuò)
sex=gender.male;//對

任意值類型

任意值是 TypeScript 針對編程時(shí)類型不明確的變量使用的一種數(shù)據(jù)類型,它常用于一下三種情況。

  • 變量的值會動態(tài)改變時(shí),比如來自用戶的輸入,任意值類型可以讓這些變量跳過編譯階段的類型檢查,示例代碼如下:
let x: any = 1;    // 數(shù)字類型
x = 'I am who I am';    // 字符串類型
x = false;    // 布爾類型
  • 改寫現(xiàn)有代碼時(shí),任意值允許在編譯時(shí)可選擇地包含或移除類型檢查,示例代碼如下:
let x: any = 4;
x.ifItExists();    // 正確,ifItExists方法在運(yùn)行時(shí)可能存在,但這里并不會檢查
x.toFixed();    // 正確
  • 定義存儲各種類型數(shù)據(jù)的數(shù)組時(shí),示例代碼如下:
let arrayList: any[] = [1, false, 'fine'];
arrayList[1] = 100;

null 和 undefined

默認(rèn)情況下,null 和 undefined 是其它類型的子類型,可以賦值給其它類型,如數(shù)字類型,此時(shí),賦值后的類型會變成 null 或 undefined。而在TypeScript中啟用嚴(yán)格的空校驗(yàn)(--strictNullChecks)特性,就可以使得null 和 undefined 只能被賦值給 void 或本身對應(yīng)的類型,它們 都是只有一種值.示例代碼如下:

// 啟用 --strictNullChecks
let x: number;
x = 1; // 運(yùn)行正確
x = undefined;    // 運(yùn)行錯(cuò)誤
x = null;    // 運(yùn)行錯(cuò)誤

上面的例子中變量 x 只能是數(shù)字類型。如果一個(gè)類型可能出行 null 或 undefined, 可以用 | 來支持多種類型,示例代碼如下:

// 啟用 --strictNullChecks
let x: number | null | undefined;
x = 1; // 運(yùn)行正確
x = undefined;    // 運(yùn)行正確
x = null;    // 運(yùn)行正確

void 類型

在 TypeScript 中,使用 void 表示沒有任何類型。 例如一個(gè)函數(shù)沒有返回值時(shí),意味著返回值類型是 void,示例代碼如下:

function hello(): void {
    alert("Hello Angular");
}

對于可忽略返回值的回調(diào)函數(shù)來說,使用 void 類型會比任意值類型更安全一些,示例代碼如下:

function func(foo:() => void) {
    let f = foo();    // 使用函數(shù) foo 的返回值
    f.doSth();    // 報(bào)錯(cuò), void 類型不存在 doSth() 方法, 此時(shí)換成任意值類型都不回報(bào)錯(cuò)
}

never 類型

never 是其它類型(包括 null 和 undefined)的子類型,代表從不會出現(xiàn)的值。這意味著聲明為 never 類型的變量只能被 never 類型所賦值,在函數(shù)中它通常表現(xiàn)為拋出異常或無法執(zhí)行到終止點(diǎn)(例如無線循環(huán)),示例代碼如下:

let x: never;
let y: number;

// 運(yùn)行錯(cuò)誤,數(shù)字類型不能轉(zhuǎn)為 never 類型
x = 123;

// 運(yùn)行正確,never 類型可以賦值給 never類型
x = (()=>{ throw new Error('exception')})();

// 運(yùn)行正確,never 類型可以賦值給 數(shù)字類型
y = (()=>{ throw new Error('exception')})();

// 返回值為 never 的函數(shù)可以是拋出異常的情況
function error(message: string): never {
    throw new Error(message);
}

// 返回值為 never 的函數(shù)可以是無法被執(zhí)行到的終止點(diǎn)的情況
function loop(): never {
    while (true) {}
}

微軟:工具:(vb、vc)和tsc 語言:(.net、asp)

類型推測(根據(jù)初始化值推測類型官方叫 隱試類型聲明):

var a=12 等于 var a:number
var a; 等于 var a:any

沖突檢測:(編譯器會自動排出掉無用的選項(xiàng))

雖然比不了jdk里面的javac 但是已經(jīng)很不錯(cuò)了

聯(lián)合類型:

    var a=number|boolean;

數(shù)組也有類型(也有泛型):

     var arr:類型[]=xxxxx;

函數(shù)類型:

1.參數(shù)
      有類型
      簽名檢查--個(gè)數(shù)、類型 得對
 外部聲明變量: declare
2.返回值

復(fù)合類型(Object Type):

var a:{x:number,y;number,z?}
a={x:12,y:5}

接口(interface):

*和java的接口類不一樣
汽車(接口):加油、開、停....

真面向?qū)ο?

class寫法、extend、多繼承...

訪問修飾符:
  1.public 公有 任何人可以訪問
   2.private 私有 只有類內(nèi)部可以訪問
  3.protected 受保護(hù)(友元) 只有子類能用

泛型: 別跟any搞混了?

any:類型隨便
  泛型:類型隨便 假如是類型number 里面必須所有都是number
  Array:內(nèi)部其實(shí)是泛型

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 概述 TypeScript本質(zhì)上是向JavaScript語言添加了可選的靜態(tài)類型和基于類的面向?qū)ο缶幊蹋瑫r(shí)也支持...
    oWSQo閱讀 8,555評論 1 45
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • 網(wǎng)上百度有很多安裝介紹,我只記錄自己碰到的問題:http://www.cnblogs.com/jys509/p/4...
    hydehao閱讀 471評論 0 0
  • 念想:時(shí)隔半年之后,再次燃起文字的熱情。我也趁著心的熱度把自己簡書的個(gè)人簽名改為「分享我的世界」,現(xiàn)實(shí)中我的世界總...
    達(dá)人墨閱讀 286評論 6 4