深入浅出TypeScript | 青训营笔记

53 阅读2分钟

1、TypeScript(本文简称TS)是JavaScript的超集,TS在JS的基础上增加这些特性

TSJS
JavaScript的超集,用于解决大型项目的代码复杂性一种脚本语言,用于创建动态网页
强类型,支持静态和动态类型动态弱类型语言
可以在编译期间发现并纠正错误只能在运行时发现错误
不允许改变变量的类型变量可以被赋值成不同类型

TS的接口是为了定义对象类型,对象类型又有什么特点呢?

  • 可选属性:?
  • 只读属性:readonly
  • 可以描述函数类型
  • 可以描述自定义属性

总之接口是非常灵活的鸭子类型。

2、TS在JS的基础上以下特性:

  • 增加类的修饰符,有public、private、protected修饰符。
  • 抽象类:只能被继承,不能被实例化。作为基类,抽象方法必须被子类实现。
  • interface约束类,使用implements关键字。

TS中方法默认是public的。

3、TS进阶

(1)联合类型 |

一个类型定义上存在多个基础类型,可以用联合类型定义。联合类型与交叉类型类似,都可以拥有多个类型的能力,区别是:联合类型一次只能一种类型;而交叉类型每次都是多个类型的合并类型。

(2)交叉类型 &

在一个对象类型上面扩展,使用交叉类型。交叉类型把几个类型的成员合并,形成一个拥有这几个类型所有成员的新类型

(3)类型断言

TypeScript 允许你覆盖它的推断,并且能以你任何你想要的方式分析它,这种机制被称为「类型断言」。TypeScript 类型断言用来告诉编译器你比它更了解这个类型,并且它不应该再发出错误。通常在迁移JS代码到TS会用断言。

(4)类型别名(type):给类型起一个别名

  • 类型别名和interface的相同点:

    • 都可以定义对象或函数
    • 都允许继承
  • 不同点:

    • interface是TS用来定义对象,type是用来定义别名方便使用
    • type可以定义基本类型,interface不可以
    • interface可以合并重复声明,type不可以

(5)泛型

如果我定义一个print函数用来打印一个变量,我可能会传入不同类型的变量,比如number或string,如果用联合类型|,会有些麻烦且不通用,我可以使用泛型

function identity<T>(arg: T): T { return arg; }