TypeScript语言

强类型与弱类型(类型安全)

强类型在语言层面限制函数的实参类型必须与形参类型相同;强类型语言中不允许有任意的数据隐式类型转换,但弱类型相反。

变量类型允许随时改变的特点,不是强弱类型的差异。

静态类型与动态类型(类型检查)

静态类型:一个变量声明时它的类型就是明确的,声明过后它的类型就不允许再修改。
动态类型:运行阶段才能够明确变量类型,而且变量的类型可以随时发生变化。

JavaScript自有类型系统的问题

弱类型的问题
  1. 由于js是脚本语言不存在编译环节,如果存在变量类型错误那么只有在运行时才会报错,如果存在耗时长的异步任务,那么这个错误很可能就会被忽略掉成为隐患;
  2. 多人协同开发时很可能会传递错误的参数类型出现bug,由于类型不明确就会造成函数功能发生改变;
  3. 出现对对象索引器错误的用法。
强类型的优势
  1. 错误更早暴露;
  2. 代码更智能,编码更准确;
  3. 重构更牢靠;
  4. 减少不必要的类型判断。

Flow静态类型检查方案

可以在变量后面增加: type对变量进行类型注解。

  • 使用步骤:

    1. 添加flow-bin;
    2. 在需要使用flow进行类型检查的文件头部增加如下注释标记;
    //@flow
    
    1. 为变量添加类型注解。
  • Flow编译移除注解

    1. 安装flow-remove-types
    2. 安装bable/core bable/cli babel/preset-flow
  • Flow开发工具插件
    Flow Language Support

  • Flow类型推断
    根据代码使用情况推断变量的类型。

  • Flow类型注解
    除了对函数参数进行类型注解外,还可以对变量和函数返回值类型进行类型注解。在括号后加上: type可以对函数返回值进行类型注解,如果返回值为空,那么类型为void

  • 原始类型
    string、number(NaN,Infinity无穷大)、boolean、null、undefined(用void表示)、symbol

  • 数组类型
    Array、number[]
    元组:[string, number] 可用于函数返回多个参数

  • 对象类型
    { [string]: string }
    还可以在对象中指定任意键值对的类型,如果这个键值对可有可无那么加上?

  • 函数类型

  • 特殊类型
    字面量类型(一般配合联合类型使用);
    通过type关键字给类型使用别名或者用type单独声明一个类型;
    maybe类型。

  • Mixed & Any
    mixed为强类型,any为弱类型(尽量不使用,作用是为了兼容老代码)

  • 运行环境API

TypeScript语言规范与基本应用

TypeScript是ES6 JavaScript类型化的超集,相比于JavaScript多了类型校验系统和ES6标准。

  • 使用步骤:

    1. 安装typescript;
    2. 使用tsc(typescript compile)命令编译typescript文件,会检查代码中的类型使用异常、移除类型注解的扩展语法、自动转化ES新特性。
  • 配置文件
    使用yarn tsc --init自动生成配置文件。

  • ts标准库声明

标准库就是内置对象所对应的声明。

  • 中文错误消息
    使用yarn tsc --local zh-CN以中文显示错误消息。(不推荐)

  • 作用域问题

    • 可以使用立即执行函数,将变量放到函数作用域里;
    • 使用export将文件作为模块使用。
ts类型

建议为每个变量添加明确的类型。

  • 枚举类型
    用关键字enum声明,=进行赋值。如果不指定值则默认从0开始累加;第一个变量如果赋值数字,后面的变量也会在此基础上开始累加。
  • 任意类型
    any类型是不安全的,不要轻易使用。
  • 类型断言
接口

使用interface关键词声明,约束对象的结构。

  • 可选成员 ?:
  • 只读成员readonly
  • 动态成员[key: string]: string

你可能感兴趣的:(TypeScript语言)