TypeScript是什么

    是以JavaScript为构建基础的语言是一个JavaScript的超集,可以在任何支持JavaScript的平台中执行,TypeScript扩展了JavaScript并添加了类型,Ts不能被Js解析器直接执行,需要把Ts编译成js.

  TypeScript增加了什么

    1.类型

    2.支持ES的新特性

    3.添加ES不具备的新特性

    4.丰富的配置选项

    5.强大的开发工具ff

  

  Typescript为什么要为JS添加类型支持?
    背景:JS的类型系统存在“先天缺陷”,JS代码中绝大部分错误都是类型错误(UncaughtTypeError)。问题:增加了找Bug、改Bug的时间,严重影响开发效率。
    从编程语言的动静来区分,TypeScript属于静态类型的编程语言,JS属于动态类型的编程语言。
    静态类型:编译期做类型检查;动态类型:执行期做类型检查。代码编译和代码执行的顺序:1编译2执行。
    对于JS来说:需要等到代码真正去执行的时候才能发现错误(晚)。对于TS来说:在代码编译的时候(代码执行前)就可以发现错误(早)。
    并且,配合VSCode等开发工具,TS可以提前到在编写代码的同时就发现代码中的错误,减少找Bug、改Bug时间。

  TypeScript相比JS的优势
    1.更早(写代码的同时)发现错误,减少找Bug、改Bug时间,提升开发效

    2.程序中任何位置的代码都有代码提示,随时随地的安全感,增强了开发体验

    3.强大的类型系统提升了代码的可维护性,使得重构代码更加容易。

    4.支持最新的ECMAScript语法,优先体验最新的语法,让你走在前端技术的最前沿。

    5. TS类型推断机制,不需要在代码中的每个地方都显示标注类型,让你在享受优势的同时,尽量降低了成本。

  常用基础类型概述
    可以将TS中的常用基础类型细分为两类:1JS已有类型2TS新增类型。1. JS 已有类型
·      原始类型: number/string/boolean/null/undefined/symbolo对象类型: object(包括,数组、对象、函数等对象)。
    2.TS新增类型
      联合类型、自定义类型(类型别名)、接口、元组、字面量类型、枚举、void、any等。

  数组类型
    2.对象类型: object(包括,数组、对象、函数等对象)。
      特点:对象类型,在TS中更加细化,每个具体的对象都有自己的类型语法。
      数组类型的两种写法:(推荐使用number[]写法)

  类型别名
    类型别名(自定义类型) :为任意类型起别名。
    使用场景:当同一类型(复杂)被多次使用时,可以通过类型别名,简化该类型的使用。

  对象类型
    JS中的对象是由属性和方法构成的,而TS中对象的类型就是在描述对象的结构(有什么类型的属性和方法)。
      对象类型的写法:

        1.直接使用来描述对象结构。属性采用属性名:类型的形式;方法采用方法名():返回值类型的形式。2. 如果方法有参数,就在方法名后面的小括号中指定参数类型(比如: greet(name: string): void)。3.在一行代码中指定对象的多个属性类型时,使用;(分号)来分隔。
        如果一行代码只指定一个属性类型(通过换行来分隔多个属性类型),可以去掉;(分号)。·方法的类型也可以使用箭头函数形式(比如:{ sayHi: () => void })。

  接口
    当一个对象类型被多次使用时,一般会使用接口( interface)来描述对象的类型,达到复用的目的。

      1.使用interface 关键字来声明接口。

      2.接口名称(比如,此处的IPerson),可以是任意合法的变量名称。

      3.声明接口后,直接使用接口名称作为变量的类型。

      4.因为每一行只有一个属性类型,因此,属性类型后没有;(分号)。

  interface(接口)和type(类型别名)的对比:
    相同点:都可以给对象指定类型。
    不同点:
      接口,只能为对象指定类型。
      类型别名,不仅可以为对象指定类型,实际上可以为任意类型指定别名。

  元组
    场景:在地图中,使用经纬度坐标来标记位置信息。
    可以使用数组来记录坐标,那么,该数组中只有两个元素,并且这两个元素都是数值类型。

    使用number[]的缺点:不严谨,因为该类型的数组中可以出现任意多个数字。更好的方式:元组( Tuple) 。
    元组类型是另一种类型的数组,它确切地知道包含多少个元素,以及特定索引对应的类型。

    1.元组类型可以确切地标记出有多少个元素,以及每个元素的类型。2.该示例中,元素有两个元素,每个元素的类型都是number。

  类型推论
    在TS中,某些没有明确指出类型的地方,TS的类型推论机制会帮助提供类型。换句话说:由于类型推论的存在,这些地方,类型注解可以省略不写!
    发生类型推论的2种常见场景:1声明变量并初始化时2决定函数返回值时。

  字面量类型

  通过TS类型推论机制,可以得到答案:
    1.变量str1的类型为: string。
    2.变量str2的类型为:'Hello TS'。

    解释:
      1. str1是一个变量(let),它的值可以是任意字符串,所以类型为: string。
      2. str2是一个常量(const),它的值不能变化只能是'HelloTS',所以,它的类型为:'Hello TS'。
    注意∶此处的'HelloTS',就是一个字面量类型。也就是说某个特定的字符串也可以作为TS中的类型。除字符串外,任意的JS字面量(比如,对象、数字等)都可以作为类型使用。

  TS中的高级类型有很多,重点学习以下高级类型:

    1. class类

    2.类型兼容性

    3.交叉类型

    4.泛型和keyof

    5.索引签名类型和索引查询类型

    6.映射类型

   class类
    TypeScript全面支持ES2015中引入的class 关键字,并为其添加了类型注解和其他语法(比如,可见性修饰符等)。
    class基本使用,如下:

      1.根据TS中的类型推论,可以知道Person类的实例对象p的类型是Person。

      2. TS中的class,不仅提供了class的语法功能,也作为一种类型存在。

  类型兼容性
    两种类型系统:1 StructuralType System(结构化类型系统)2Nominal Type System(标明类型系统)。

    TS采用的是结构化类型系统,也叫做ducktyping(鸭子类型),类型检查关注的是值所具有的形状。
    也就是说,在结构类型系统中,如果两个对象具有相同的形状,则认为它们属于同一类型。

posted on 2022-06-20 09:14  李子骞  阅读(695)  评论(0编辑  收藏  举报