美文网首页
typescript语法精讲四(笔记)

typescript语法精讲四(笔记)

作者: 听书先生 | 来源:发表于2022-12-16 22:08 被阅读0次

    - 枚举类型

    枚举的特性就是将一组可能出现的值,列举出来,定义到类型中去

    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
    

    - 认识泛型

    泛型实际上就是实现类型的参数化。
    如果定义参数为any类型的话,虽然能够实现,但是传入的number类型,希望返回的不是any类型,同样是number类型。因此,需要先在函数中捕获到参数的类型是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
    

    - 多个泛型的基础使用

    在平常的开发中:

    • T:Type的缩写、类型
    • K、V:key和value的缩写、键值对
    • E:Element的缩写、元素
    • O:Object的缩写、对象
    // 多个泛型的基础使用
    function foo<K, V>(key: K, value: V) {
        return [key, value];
    }
    
    const keys = foo('name', 'abc');
    

    - 泛型接口的定义

    在开发中需要去定义泛型接口

    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);
    

    - 泛型约束

    如果传入的数据存在某些共性,但这些数据类型又不相同

    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));
    

    - 模块化开发

    export function add(num1: number, num2: number) {
      return num1 + num2;
    }
    
    export function sub(num1: number, num2: number) {
      return num1 - num2;
    }
    

    - 命名空间

    命名空间也称之为内部模块,主要的目的是将一个模块内部再进行作用域的划分,防止一些命名冲突的问题。

    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查找类型声明的路径:

    • 内置类型声明
    • 外部定义的类型声明
    • 自己定义的类型声明

    - 内置类型声明

    内置类型声明都是typescript自带的,内置了javascript运行时的一些标准化的API的声明文件,比如Math、Date等内置类型
    内置类型声明通常在我们安装typescript的环境中会带有的;
    phttps://github.com/microsoft/TypeScript/tree/main/lib

    - 外部定义类型声明和自定义声明

    外部类型声明是使用一些库(比如第三方库)时,需要的一些类型声明。
    第三方库通常有两种类型声明方式:

    相关文章

      网友评论

          本文标题:typescript语法精讲四(笔记)

          本文链接:https://www.haomeiwen.com/subject/cuurqdtx.html