TypeScript學(xué)習(xí)記錄

今天也好喜歡你啊。

寫這篇的時(shí)候,也滿腦子的你。

2020/02/18



1.TypeScript 只會進(jìn)行靜態(tài)檢查,如果發(fā)現(xiàn)有錯(cuò)誤,編譯的時(shí)候就會報(bào)錯(cuò),但仍會生成js文件

如果要在報(bào)錯(cuò)的時(shí)候終止 js 文件的生成,可以在 tsconfig.json 中配置 noEmitOnError 即可




1.JavaScript 的類型分為兩種:原始數(shù)據(jù)類型和對象類型。

原始數(shù)據(jù)類型包括:布爾值、數(shù)值、字符串、null、undefined 以及 ES6 中的新類型 Symbol。

在 TypeScript 中,boolean 是 JavaScript 中的基本類型,而 Boolean 是 JavaScript 中的構(gòu)造函數(shù)。其他基本類型(除了 null 和 undefined)一樣

eg:

let isDone: boolean = false; 編譯通過

let createdByNewBoolean: boolean = new Boolean(1);或者 let createdByNewBoolean: Boolean = new Boolean(1);? 編譯不通過,因?yàn)榉祷氐氖且粋€(gè) Boolean 對象


2.Void、undefined 和 null

在 TypeScript 中,可以用 void 表示沒有任何返回值的函數(shù);

聲明一個(gè) void 類型的變量沒有什么用,因?yàn)槟阒荒軐⑺x值為 undefined 和 null;

undefined 和 null 是所有類型的子類型。也就是說 undefined ?和 null類型的變量,可以賦值給其他變量;void不行

eg:

let num: number = undefined; 編譯通過


3.any類型

允許被賦值為任意類型;

變量如果在聲明的時(shí)候,未指定其類型,那么它會被識別為任意值類型;

eg:

let something;

something = 'seven';

something = 7;? 編譯通過,因?yàn)轭愋屯普搶omething認(rèn)為any

eg:

let myFavoriteNumber = 'seven';

myFavoriteNumber = 7;? 編譯不通過,因?yàn)轭愋屯普搶yFavoriteNumber認(rèn)為string


4.聯(lián)合類型

當(dāng)不確定一個(gè)聯(lián)合類型的變量到底是哪個(gè)類型的時(shí)候,我們只能訪問此聯(lián)合類型的所有類型里共有的屬性或方法

eg:

let myFavoriteNumber: string | number;

5.interface

它是對行為的抽象,而具體如何行動需要由類(classes)去實(shí)現(xiàn)(implement);接口一般首字母大寫;

一旦定義了任意屬性,那么確定屬性和可選屬性都必須是它的子屬性

eg:

interface Person {

? ? name: string;

? ? age?: number;

}

name屬性必須有,age可以沒有,除了這兩個(gè)不允許有其他屬性。


eg:

interface Person{

? ? name: string;

? ? age?: number;

? ? [propName: string]: any;

}

使用 [propName: string] 定義了任意屬性取 string 類型的值。

let tom: Person = {

? ? name: 'Tom',

? ? gender: 'male'

};

eg:

interface Person {

? ? readonly id: number;

? ? name: string;

? ? age?: number;

? ? [propName: string]: any;

}

let tom: Person = {

? ? id:1,

? ? name: 'Tom',

? ? gender: 'male'

};

只讀屬性在第一次給對象賦值時(shí)也要賦值,只是后面不能修改

tom.id = 89757;? 會編譯失敗


6.數(shù)組(待續(xù))

數(shù)組: let fibonacci: number[] = [1, 1, 2, 3, 5];

數(shù)組泛型:? let fibonacci: Array<number> = [1, 1, 2, 3, 5];


7.函數(shù)

在 TypeScript 的類型定義中,=> 用來表示函數(shù)的定義,左邊是輸入類型,需要用括號括起來,右邊是輸出類型;

與ES6中的 => 完全不同

eg:

let mySum = function (x: number, y: number): number {

? ? return x + y;

};

let mySum: (x: number, y: number) => number = function (x: number, y: number): number {

? ? return x + y;

};

前者利用類型推論推斷出mySum的類型


允許可選參數(shù),用 “?”表示,但可選參數(shù)必須在必須參數(shù)之后

eg:

function buildName(firstName?: string, lastName: string) {

? ? ...

}


允許參數(shù)默認(rèn)值,TypeScript 會將添加了默認(rèn)值的參數(shù)識別為可選參數(shù);此時(shí)就不受「可選參數(shù)必須接在必需參數(shù)后面」的限制了

eg:

function buildName(firstName: string = 'Tom', lastName: string) {

? ...

}


剩余參數(shù),使用 “...rest”方式

eg:

function push(array, ...items) {

? ....

}


允許函數(shù)重載

TypeScript 會優(yōu)先從最前面的函數(shù)定義開始匹配,所以多個(gè)函數(shù)定義如果有包含關(guān)系,需要優(yōu)先把精確的定義寫在前面


8.斷言

當(dāng)不確定一個(gè)聯(lián)合類型的變量到底是哪個(gè)類型的時(shí)候,我們只能訪問此聯(lián)合類型的所有類型里共有的屬性或方法。此時(shí)可以使用類型斷言,將該變量“轉(zhuǎn)換”為聯(lián)合類型中的一個(gè);

斷言成一個(gè)聯(lián)合類型中不存在的類型是不允許的

eg:

function getLength(something: string | number): number {

? ?if ((<string>something).length) {

? ? ? ? return (<string>something).length;

? ? } else {

? ? ? ? return something.toString().length;

? ? }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容