- 枚舉類型
枚舉的特性就是將一組可能出現(xiàn)的值堤框,列舉出來测垛,定義到類型中去
enum Direction {
LEFT,
RIGHT,
TOP,
BOTTOM
}
console.log(Direction['0']); // LEFT
console.log(Direction['LEFT']); // 0
- 枚舉類型的值
枚舉類型默認(rèn)是有值的萝究,當(dāng)給枚舉某個(gè)值的時(shí)候,這時(shí)候會進(jìn)行遞增廊酣。
enum Direction {
LEFT = 0,
RIGHT,
TOP,
BOTTOM
}
console.log(Direction['RIGHT']); // 1
enum Direction {
LEFT,
RIGHT,
TOP = 'TOP',
BOTTOM = 'BOTTOM'
}
console.log(Direction[0]); // LEFT
- 認(rèn)識泛型
泛型實(shí)際上就是實(shí)現(xiàn)類型的參數(shù)化能耻。
如果定義參數(shù)為any類型的話,雖然能夠?qū)崿F(xiàn)亡驰,但是傳入的number類型晓猛,希望返回的不是any類型,同樣是number類型凡辱。因此戒职,需要先在函數(shù)中捕獲到參數(shù)的類型是number,并且使用它來作為返回值的類型透乾。
function foo<Type>(arg: Type): Type {
return arg;
}
const num = foo(111);
console.log(num); // 111
const str = foo('abc');
console.log(str); // abc
- 多個(gè)泛型的基礎(chǔ)使用
在平常的開發(fā)中:
- T:Type的縮寫洪燥、類型
- K、V:key和value的縮寫乳乌、鍵值對
- E:Element的縮寫捧韵、元素
- O:Object的縮寫、對象
// 多個(gè)泛型的基礎(chǔ)使用
function foo<K, V>(key: K, value: V) {
return [key, value];
}
const keys = foo('name', 'abc');
- 泛型接口的定義
在開發(fā)中需要去定義泛型接口
interface Info<T> {
data: T,
list: T[],
getValue: (value: T) => T
}
const infos: Info<number> = {
data: 20,
list: [1, 2, 3, 4, 5],
getValue: (value: number) => {
return 10;
}
}
console.log(infos);
- 泛型類
class Info<T> {
data: T
value: T
constructor(data: T, value: T) {
this.data = data;
this.value = value;
}
}
const stu1 = new Info(10, 20);
const stu2: Info<string> = new Info('123', 'abc');
console.log(stu1, stu2);
- 泛型約束
如果傳入的數(shù)據(jù)存在某些共性汉操,但這些數(shù)據(jù)類型又不相同
interface Length {
length: number;
}
function getLength<T extends Length>(data: T): number {
return data.length;
}
const str = 'get the current data length';
console.log(getLength(str));
const list = [1, 2, 3, 4, 5, 6];
console.log(getLength(list));
- 模塊化開發(fā)
export function add(num1: number, num2: number) {
return num1 + num2;
}
export function sub(num1: number, num2: number) {
return num1 - num2;
}
- 命名空間
命名空間也稱之為內(nèi)部模塊再来,主要的目的是將一個(gè)模塊內(nèi)部再進(jìn)行作用域的劃分,防止一些命名沖突的問題磷瘤。
export namespace Time {
export function getValue(time: string): string {
return new Date().toLocaleDateString();
}
}
export namespace Price {
export function getValue(price: number): number {
return 20;
}
}
- 類型的查找
typescript中 .d.ts文件是用作類型的聲明(declare)的芒篷,它僅僅用來做類型的檢測,告知typescript有哪些類型采缚。
typescript查找類型聲明的路徑:
- 內(nèi)置類型聲明
- 外部定義的類型聲明
- 自己定義的類型聲明
- 內(nèi)置類型聲明
內(nèi)置類型聲明都是typescript自帶的针炉,內(nèi)置了javascript運(yùn)行時(shí)的一些標(biāo)準(zhǔn)化的API的聲明文件,比如Math扳抽、Date等內(nèi)置類型
內(nèi)置類型聲明通常在我們安裝typescript的環(huán)境中會帶有的糊识;
phttps://github.com/microsoft/TypeScript/tree/main/lib
- 外部定義類型聲明和自定義聲明
外部類型聲明是使用一些庫(比如第三方庫)時(shí)绩社,需要的一些類型聲明。
第三方庫通常有兩種類型聲明方式:
- 方式一:庫中進(jìn)行類型聲明(編寫.d.ts文件)
- 方式二:通過社區(qū)的公有庫存放類型聲明文件
該庫的GitHub地址:https://github.com/DefinitelyTyped/DefinitelyTyped/
該庫查找聲明安裝方式的地址:https://www.typescriptlang.org/dt/search?search=