typescript語法精講四(筆記)

- 枚舉類型

枚舉的特性就是將一組可能出現(xiàn)的值,列舉出來,定義到類型中去

enum Direction {
    LEFT,
    RIGHT,
    TOP,
    BOTTOM
}

console.log(Direction['0']);  // LEFT
console.log(Direction['LEFT']);  // 0

- 枚舉類型的值

枚舉類型默認是有值的,當給枚舉某個值的時候,這時候會進行遞增。

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

- 認識泛型

泛型實際上就是實現(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

- 多個泛型的基礎(chǔ)使用

在平常的開發(fā)中:

  • T:Type的縮寫、類型
  • K、V:key和value的縮寫、鍵值對
  • E:Element的縮寫、元素
  • O:Object的縮寫、對象
// 多個泛型的基礎(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)部模塊,主要的目的是將一個模塊內(nèi)部再進行作用域的劃分,防止一些命名沖突的問題。

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運行時的一些標準化的API的聲明文件,比如Math、Date等內(nèi)置類型
內(nèi)置類型聲明通常在我們安裝typescript的環(huán)境中會帶有的;
phttps://github.com/microsoft/TypeScript/tree/main/lib

- 外部定義類型聲明和自定義聲明

外部類型聲明是使用一些庫(比如第三方庫)時,需要的一些類型聲明。
第三方庫通常有兩種類型聲明方式:

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

相關(guān)閱讀更多精彩內(nèi)容

  • 一、簡介 1.1 什么是 TypeScript TypeScript 是 JavaScript 的一個超集,主要提...
    _ihhu閱讀 1,358評論 0 2
  • 為什么使用Typescript? 微軟推出TypeScript主要是為實現(xiàn)兩個目標: 為Javascript提供可...
    編程碼農(nóng)閱讀 340評論 0 0
  • TypeScript 是 JavaScript 的一個超集,主要提供了類型系統(tǒng)和對 ES6 的支持,它由 Micr...
    Gukson666閱讀 8,894評論 3 29
  • 簡介 TypeScript 是 JavaScript 的一個超集,主要提供了 類型系統(tǒng) 和對 ES6 的支持,由 ...
    MrWelson閱讀 16,157評論 3 21
  • 1、什么是Typescript? TypeScript是一種由微軟開發(fā)和維護的免費開源編程語言。它是一個強類型的J...
    家有餓犬和聾貓閱讀 1,385評論 0 1

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