这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
目录
- 什么是TypeScript
- TypeScript的基本语法
- 基础数据类型
- 对象类型
- 函数类型
- 数组类型
- 补充类型
- TypeScript高级数据结构
- 联合/交叉类型
- 类型保护与守卫
- 使用样例
- 函数返回值类型
- 工程应用
详细知识
什么是TypeScript?
动、静态类型,强、弱类型语言
JS是动态类型(编译之前执行,执行阶段才进行类型检验/匹配)
TS是静态类型(编译之后才会执行,编译阶段就会报错,Python也是静态类型)
它们都是弱类型语言(弱类型语言不同类型的数据可以进行类型转换,而强类型语言互相转换会出错)
TypeScript的特性?
静态类型
- 可读性增强:基于语法解析TSDoc,ide增强
- 可维护性增强:在编译阶段暴露大部分错误=>多人合作的大项目中有更好地稳定性和开发效率 JS的超集
- 包含于兼容所有JS特性,支持共存
- 支持渐进式引入与升级
基础数据类型
- 字符串
- 数字
- bool
- null
- undefined
对象类型
函数类型
可以通过interface定义变量
函数重载
方法重载在类中定义多个同名的方法,但是每一个同名的方法要求不同数据类型和不同参数。...一个或多个签名(函数体前面叫做签名)组合叫做函数重载,外部调用函数重载时,只能调用重载的签名,不能调用 调用使用的函数签名。调用函数重载时会根据传递的参数来判定调用的函数。如果只有一个函数体,只有实现签名配备的函数体,所有重载签名只有签名,没有配置函数体。—— TS中的方法重载,函数重载,构造器重载
数组类型
其实是一个扩展对象,常用类型+方括号表示和泛型表示
TS补充类型
TS泛型
泛型不预先指定具体的类型,而在使用的时候再指定类型的一种特性。不仅可以使用在函数中,类型名后加一个尖括号,使用泛型。
语法
- 泛型约束:限制泛型必须符合字符串
- 泛型的默认类型(语法与ES6中结构的默认指示相似):
type关键字
- 类型别名:通过type关键字定义别名类型
- 类型断言:通过as关键字断言某个类型为正确类型
字符串/数字 字面量 允许指定字符串/数字必须的固定值,用符号“|”作为分割
TypeScript高级数据类型
- 联合类型(|):IA | IB;联合类型表示一个值可以是几种类型之一
- 交叉类型(&):IA & IB;多种类型叠加到一起成为一种类型,包含了所需的所有类型的特征
- 类型保护与类型守卫
类型保护只能访问联合类型中交集的部分,类型守卫可以解决类型保护不能访问交集以外部分的问题,需要定义一个函数,返回值是一个类型谓词,生效范围为子作用域。
使用样例
- 联合类型+类型保护=自动类型判断
- 使用关键字索引类型
函数返回值类型
通过泛型表达(泛型必须是一个函数)
工程应用
Web(相关loader: awesome-typescript-loader, babel-loader,不同loader的配置也会不一样)
- webapack loader配置,ts转换为js文件
- 配置tsconfig.js文件
- 运行webpack启动/打包
- loader处理js文件会进行编译与类型检查
Node.js
- 使用TSC编译
- 安装Node和npm
- 配置tsconfig.js文件
- 使用npm安装tsc
- 使用tsc运行编译得到js文件