今天也好喜歡你啊呕诉。
寫這篇的時(shí)候缘厢,也滿腦子的你。
2020/02/18
一
1.TypeScript 只會(huì)進(jìn)行靜態(tài)檢查甩挫,如果發(fā)現(xiàn)有錯(cuò)誤贴硫,編譯的時(shí)候就會(huì)報(bào)錯(cuò),但仍會(huì)生成js文件
如果要在報(bào)錯(cuò)的時(shí)候終止 js 文件的生成伊者,可以在 tsconfig.json 中配置 noEmitOnError 即可
二
1.JavaScript 的類型分為兩種:原始數(shù)據(jù)類型和對(duì)象類型英遭。
原始數(shù)據(jù)類型包括:布爾值、數(shù)值亦渗、字符串挖诸、null、undefined 以及 ES6 中的新類型 Symbol法精。
在 TypeScript 中多律,boolean 是 JavaScript 中的基本類型,而 Boolean 是 JavaScript 中的構(gòu)造函數(shù)搂蜓。其他基本類型(除了 null 和 undefined)一樣
eg:
let isDone: boolean = false; 編譯通過(guò)
let createdByNewBoolean: boolean = new Boolean(1);或者 let createdByNewBoolean: Boolean = new Boolean(1);? 編譯不通過(guò)狼荞,因?yàn)榉祷氐氖且粋€(gè) Boolean 對(duì)象
2.Void、undefined 和 null
在 TypeScript 中帮碰,可以用 void 表示沒有任何返回值的函數(shù)相味;
聲明一個(gè) void 類型的變量沒有什么用,因?yàn)槟阒荒軐⑺x值為 undefined 和 null殉挽;
undefined 和 null 是所有類型的子類型攻走。也就是說(shuō) undefined ?和 null類型的變量,可以賦值給其他變量此再;void不行
eg:
let num: number = undefined; 編譯通過(guò)
3.any類型
允許被賦值為任意類型昔搂;
變量如果在聲明的時(shí)候,未指定其類型输拇,那么它會(huì)被識(shí)別為任意值類型摘符;
eg:
let something;
something = 'seven';
something = 7;? 編譯通過(guò),因?yàn)轭愋屯普搶omething認(rèn)為any
eg:
let myFavoriteNumber = 'seven';
myFavoriteNumber = 7;? 編譯不通過(guò)策吠,因?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
它是對(duì)行為的抽象,而具體如何行動(dòng)需要由類(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'
};
只讀屬性在第一次給對(duì)象賦值時(shí)也要賦值,只是后面不能修改
tom.id = 89757;? 會(huì)編譯失敗
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 的類型定義中择克,=> 用來(lái)表示函數(shù)的定義恬总,左邊是輸入類型,需要用括號(hào)括起來(lái)肚邢,右邊是輸出類型壹堰;
與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 會(huì)將添加了默認(rèn)值的參數(shù)識(shí)別為可選參數(shù)响蕴;此時(shí)就不受「可選參數(shù)必須接在必需參數(shù)后面」的限制了
eg:
function buildName(firstName: string = 'Tom', lastName: string) {
? ...
}
剩余參數(shù)谆焊,使用 “...rest”方式
eg:
function push(array, ...items) {
? ....
}
允許函數(shù)重載
TypeScript 會(huì)優(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;
? ? }
}