TypeScript 开发实战 学习笔记一

1、什么是TypeScript?

一个拥有类型系统的JavaScript超集,可以编译成纯JavaScript。
三个要点:

  • 类型检查,严格的类型检查,在编译阶段发现问题,不必把问题带到线上
  • 语言扩展,包含ES6及未来提案中的特性,也从其他语言借鉴特性,比如接口和抽象类
  • 工具属性,可以编译成纯JavaScript,可以在任何浏览器上运行,更像一个工具

2、为什么要使用TypeScript?

  • 更好的IDE支持,比如VS Code 的自动补全,导航和重构功能,使得接口定义可以代替文档,
  • 可以提升效率,降低维护成本
  • 可以构建类型思维,从代码的编写者蜕变成代码的设计者

3、静态类型语言和动态类型语言

  • 静态类型语言:在编译阶段确定所有变量的类型
  • 动态类型语言:在执行阶段确定所有变量的语言

    在这里插入图片描述

4、TypeScript的数据类型

除了ES6包含的数据类型,TypeScript又新增了

  • void
  • any
  • never
  • 元组: 特殊的数组类型,限制了数组的元素的类型和数量
  • 枚举
  • 高级类型

1)类型注解:相当于强类型语言中的类型声明。
2)联合类型,通过一个竖线来分开
3)元组越界问题,设置好的元组,可以通过push方法元组新增元素,元素也可以被添加元组中,但是在访问的时候报错
4)一个变量被声明为undefined/null类型,就不能再赋值其他类型,只能被赋值为它本身。
但是undefined/null类型是所有类型的子类型,是可以赋值给其他类型的,可以通过tsconfig.json里的 strictnullchecks 设置成 false 来实现
5)在JavaScript中,void是一个操符,可以让任何表达式返回undefined,比如最简单的返回undefined的方式是void 0,而且undefined不是一个保留字,可以通过设置一个undefined变量来覆盖全局的undefined变量。在TypeScript中,void类型就是指,没有任何返回值的类型。
6)没有声明的变量就是any类型
7)never是指永远不会有返回值的类型
8)枚举类型,就是一组有名字的常量集合,
9)枚举类型分为:

  • 数字枚举和字符串枚举,数字枚举的实现原理是反向映射,成员名称分别作为key和value
  • 字符串枚举,只有成员名称当做了key,
  • 异构枚举,包含数字枚举和字符串枚举,不推荐使用
    10)枚举成员的值是一个只读类型,不能修改
    枚举成员的类型分为2类
  • 常量枚举,会在编译的时候计算出结果,以常量的形式出现在运行环境
    • 没有初始值的情况
    • 对已有枚举成员的引用
    • 常量表达式
  • 需要被计算的枚举成员:一些非常量的表达式,不会再编译时计算,会在运行时计算。(在computed member成员后面的枚举成员,一定要有一个初始值,否则会报错)

11)常量枚举,用const声明的枚举类型为常量枚举,会在编译之后被删除
作用: 当我们不需要一个对象,而只需要对象的值的时候,就可以声明常量枚举,减少我们在编译环境的代码
12)枚举类型:两种不同类型的枚举,是不可以进行比较的。

5、对象类型接口

接口可以用来约束对象,函数,类的一种结构,是代码协作的契约
类型断言 x as string 明确的告诉编译器,这个x就是一个string类型,
字符串索引签名

interface result {
  name: string;
  age: number;
  [x: string]: any; // 字符串索引签名
}

接口成员的属性

不能知道接口的属性的数目,就可以使用,可索引类型的接口

interface StringArray {
  [index: number]: string;
}
interface Names {
  [x: string]: string;
}
// 混用
interface Person {
  [x: string]: string;
  [y: number]: string; // 数字类型的属性值的类型一定要是string类型的子类型,js会进行类型转换
}

接口定义函数

let add = (x: number, y: number) => number;

interface Add {
  (x: number, y: number): number;
}
// 类型别名
type Add =  (x: number, y: number) => number;

类型别名,就是为这个类型起一个名字

混合类型接口

interface Lib {
  (): void;
  version: string;
  dosomething(): void;
}

let lib: Lib = (() => {}) as Lib;
lib.version = '1.0.0';
lib.dosomething = () => {}
//
                
                                 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐