TypeScript
js和ts的区别
JavaScript
- 动态类型: 在执行时才会进行类型检查。
- 弱类型语言: 类型转换,比如数字1和字符0相加会进行隐式转换。
TypeScript
- 静态类型: 提前做类型检查
- 弱类型语言
TypeScript优势
- 静态类型
- 可读性增强:基于语法解析TSDoc,ide增强
- 可维护性增强:在编译阶段暴露大部分错误
=> 多人合作的大型项目中,获得更好的稳定性和开发效率
- JS的超集
- 包含于兼容所有Js特性,支持共存
- 支持渐进式引入与升级
语法
基本数据类型
- number
- string
- boolean
- undefied
- null
- bigint
- symbol
引用数据类型
- object:是下面三类的父类
- array
- tuple:元组
- enum:枚举
特殊类型
- void
- any
- unknown
所有的数据类型都能够被赋值给unknown类型,但是unknown类型的值只能够被赋值给any类型和unknown类型本身,只有保存任意类型的容器才能够保存unknown类型
- never
never类型表示那些永远不存在的值的类型。例如,never类型是那些总是抛出异常或根本不会有返回值的函数表达式的返回值类型;never类型是任何类型的子类型,可以赋值给任何类型;然后没有任何值的类型是never的子类型
自定义特性
- interface
- type:类型别名
高级类型
- 联合
|/交叉类型& - 类型保护与类型守卫
interface和type的区别
相同点:
- 都是用来定义对象或函数的形状。
- 支持继承,并且可以互相继承。不过interface是通过extends实现的,type是通过&实现的。
区别:
type 可以做到而 interface 不能做到
- type 可以声明基本类型。
- type 可以声明联合类型。
- type 可以声明元组类型。
- type 可以通过 typeof 操作符来声明
type myType = typeof someObj;
interface 可以做到而 type 不能做到
- interface 可以声明合并。
高级特性
泛型
在定义函数、接口或类的时候,有些场景是我们不预先指定类型而是在使用的时候再去指定类型,这个时候我们可以使用泛型。
泛型约束
泛型默认类型
类型别名
使用as关键字
字符串/数字字面量类型
允许指定字符串/数字必须的固定值