TypeScript入门 | 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的第10天 与大家分享TypeScript的基础入门知识,包括TypeScript的发展、语法等,不足之处欢迎大家批评指正!
TypeScript发展历史
2012-10:微软发布了TypeScript第一个版本(0.8)
2014-10:Angular发布了基于TypeScript的2.0版本
2015-04:微软发布了Visual Studio Code
2016-05:@types/react发布,TypeScript可开发React
2020-09:Vue发布了3.0版本,官方支持TypeScript
2021-11:v4.5版本发布
什么是TypeScript
JS
-
动态类型:在执行的过程才确定类型的检验匹配(编译发生在执行时)
-
弱类型语言:允许隐式类型转换,如字符串和数字可以相加
TS
- 静态类型
1.编译再执行,编译发生在执行前,如Python,Java语言
2.可读性增强:基于语法解析TSDoc,ide增强
3.可维护性增强:在编译阶段暴露大部分错误 => 多人合作的大型项目中,获得更好的稳定性和开发效率
-
弱类型语言
-
JS的超集
1.包含与兼容所有JS特性,支持共存
2.支持渐进式引入与升级
编辑器推荐
基本语法
基础数据类型
-
JS
-
TS
对象类型
- TS自定义对象
IBytedancer:大写I开头:表示对象类型
只读属性:不可更改,不可在初始化外赋值
可选属性:可以不存在
函数类型
- 方式一:
- 方式二:通过interface定义
函数重载
可用重载做根据不同类型参数的输入
- interface类型 自动做类型推断,编译不通过
解决:让IGetDate函数比匿名函数的范围大
数组类型
数组:特殊的Object,可以用interface做数组类型的定义
补充类型
TypeScript泛型
高级语法:泛型约束、泛型参数默认类型
类型别名、类型断言
-
类型别名 通过
type关键字定义对象别名类型 -
类型断言 未指定类型时,
result类型为空对象
通过as关键字,断言result类型为正确类型
字符串/数字 字面量
高级类型
好处:通过基本类型衍生出非常多的类型,不用重复编写代码
联合/交叉类型
- 原始代码:为书籍列表编写类型 不足之处:
1.类型声明繁琐,存在较多重复
2.type的类型声明不准确
- 联合类型和交叉类型改进后的代码 联合类型:IA | IB;联合类型表示一个值可以是几种类型之一
交叉类型:IA & IB;多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性
类型保护与类型守卫
例1
- 使用联合类型:只能使用交集部分
- 在TS中:通过类型守卫进行改造
定义一个函数,用as的类型断言,进行自动类型推断
例2
将数组进行反转,识别数组的类型
- 类型守卫与类型保护
高级类型
- 原代码
- 改进:通过泛型方式
函数返回值类型
对泛型做了类型限定,extends表示泛型的类型推断,语法为函数类型的定义
两个冒号:三元表达式
TypeScript工程应用
web
-
配置webpack loader相关配置
-
配置tsconfig.js文件
-
运行webpack启动/打包
-
loader处理ts文件时,会进行编译
- 相关loader
附链接,可自行浏览学习
-
awesome-typescript-loader
https://www.npmjs.com/package/awesome-typescript-loader -
babel-loader
https://www.npmjs.com/package/babel-loader
Node
- 使用TS编译
- 安装Node与npm
- 配置tsconfig.js文件
- 使用npm安装tsc
- 使用tsc运行编译得到js文件