TypeScript 入門筆記

一、原始數據類型
JavaScript 的類型分爲兩種:原始數據類型和對象數據類型。原始數據類型包括布爾值、數值、字符串、null、undefined 以及 ES6 中的 Symbol。
前五種數據類型在 TypeScript 中的應用。
注意布爾值:在 JavaScript 中,boolean 是一種基本的數據類型,Boolean 是一個將布爾值打包的布爾對象。在 TypeScript 中,boolean 也是基本數據類型,可是 Boolean 是構造函數。
二、在 TypeScript 中:
* 二進制或八進制表示的數字會被編譯成十進制。
* 能夠用 void 表示沒有返回值的函數。
* 任意值(Any)用來 表示容許賦值爲任意類型。在任意值上能夠訪問任何屬性和方法。未指定類型的無初始值的變量會被識別爲任意值。
* 聯合類型(使用 | 分隔)表示取值能夠爲多種類型中的一種。當 ts 不肯定一個聯合屬性的變量是哪一個類型的時候,只能訪問聯合類型裏的共有屬性和方法。
三、對象的類型——接口
接口名通常首字母大寫
<template>
interface InterfaceName {
readonly propName: type; // 用 readonly 定義只讀屬性
propertyName1: type1; // : 表示該屬性必需
propertyName2?: type2; // ?: 表示該屬性可選
[propertyName: type]: any; // 任意屬性
}
注:一旦定義了任意屬性,那麼肯定屬性和可選屬性都必須是它的子屬性。
四、數組的類型
(1) 類型+方括號 表示法
let fibonacci: number[] = [1, 1, 2, 3, 5];
(2) 數組泛型 Array<elemType>
let fibonacci: Array<number> = [1, 1, 2, 3, 5];
(3)用接口表示數組
interface NumberArray {
[idnex: number]: number;
}
let fibonacci: NumberArray = [1, 1, 2, 3, 5]
(4)any 在數組中表示容許出現任意類型
let list: any[] = ['Xcat Liu', 25, {website: 'http://xcatliu.com'}]
(5)類數組
五、函數的類型
JS 中函數聲明的方式有:函數聲明和函數表達式。
TS 中,要對函數的輸入輸出有約束
(1)函數聲明:
function sum(x: number, y: number): number {
return x + y;
}
(2)函數表達式:
let sum: (x: number, y: number) => number = function (x: number, y: number): number {
return x + y;
}
在 TypeScript 中,=> 用來表示函數定義,左邊是輸入類型,右邊是輸出類型,不一樣於 ES6 中的箭頭函數(=>)。
(3)用接口定義函數
interface SearchFunc {
(source: string, subString: string): boolean;
}
let mySearch: SearchFunc;
mySearch = function(source: string, subString: string) {
return source.search(subString) !== -1;
}
(4)參數中的可選參數表示方式和接口中的可選屬性相似,可選參數必須放在參數列表的最後一項
function bulidName(firistName: string, lastName?: string) {
if (lastName) {
return firistName + ' ' + lastName;
} else {
return firistName;
}
}
TS 中,添加了默認值的參數會被識別爲可選參數,此時不受放置位置限制
剩餘參數可用 ...rest 表示,rest 參數只能是參數列表中的最後一項
(5)斷言類型:經常使用於聯合類型
語法:<type>value 或 value as type
function getLength(something: string | number):number {
if (<string>something.length) {
return <string>something.length;
} else {
return something.toString().length();
}
}
斷言不是類型轉換,不能將變量斷言成一個聯合類型中不存在的類型。
六、類型別名:用 type 建立類型別名,經常使用於聯合類型
type Name = string;
type Nameresolver = () => string;
type NameOrResolver = Name | NameOrResolver;
function getName(n: NameOrResolver): Name{
if (typeof n === 'string') {
return n;
} else {
return n();
}
}
七、字符串字面量類型:用來約束取值只能是某幾個字符串中的一個
八、元組:合併了不一樣類型的對象
能夠對元組中的某一項進行賦值,若直接對元組類型的變量進行初始化或者負值,須要提供全部元祖類型中指定的項。
當賦值給越界的元素時,越界元素的類型會被限制爲元組中每一個類型的聯合類型。
九、枚舉(enum):枚舉成員會被賦值爲從 0 開始遞增的數字,同時也會對枚舉值到枚舉名進行反向映射。
枚舉項能夠包含常數項和計算所得項。
常數枚舉:使用 const enum 定義枚舉類型,會在編譯階段被刪除,且枚舉項不能包含計算所得項。
外部枚舉:使用 declare enum 定義枚舉類型,常出如今聲明文件中。
十、類
ES6 中的類 -- 經過 new 生成新實例的時候,會自動調用構造函數;使用 extends 關鍵字實現繼承,子類中使用 super 關鍵字來調用
TypeScript 中類的用法:
(1)訪問修飾符:public、private 和 protected
private 修飾的屬性或方法,在子類中也是不容許訪問的;
protected 修飾的屬性或方法,容許在子類中訪問;
public 修飾的屬性或方法,容許在任何地方被訪問。
(2)抽象類:不容許被實例化
(3)類的類型:與接口相似
(4)類與接口:一個類能夠實現多個接口,用 implements 關鍵字來實現
(5)接口能夠繼承接口,能夠繼承類
十一、泛型:定義在函數、接口或類的時候,不預先制定具體的類型,而在使用的時候再指定類型
定義泛型時,能夠一次性定義多個類型參數。
泛型約束
泛型接口
泛型類
十二、聲明合併:若定義了兩個相同名字的函數、接口或類,則會合併成一個類型。git

 

參考:https://www.gitbook.com/book/xcatliu/typescript-tutorial/detailsweb

相關文章
相關標籤/搜索