这是我参与「第四届青训营 」笔记创作活动的的第8天
什么是TypeScript
TypeScript起源
TypeScript 起源于使用JavaScript开发的大型项目 。由于JavaScript语言本身的局限性,难以胜任和维护大型项目开发。因此微软开发了TypeScript ,使得其能够胜任开发大型项目。
为什么、什么是TypeScript
- JS: 动态类型、弱类型语言
- TS: 静态类型、弱类型语言
类型系统按照「是否允许隐式类型转换」来分类,可以分为强类型和弱类型。
静态类型:
- 可读性增强:基于语法解析TSDoc,ide增强
- 可维护性增强:在编译阶段暴露大部分错误
- 在多人合作的大项目中,获得更好地稳定性和开发效率
TS是JS的超集:
- 包含兼容所有的JS特性,支持共存
- 支持渐进式引入与升级
编译器推荐
- VScode
- TypeScript官网在线
基本语法
基础数据类型
string、number、boolean、null、undefined
复杂数据类型
object、Array 复杂数据类型通常使用interface、type和泛型结合使用,来约束复杂数据。
类型定义
- 只读属性:使用readonly来约束,约束属性不能在对象初始化外来赋值
- 可选属性:定义该属性可以不存在,使用?:来定义
- 任意属性:约束所有对象属性都必须是该属性的子类型,使用 [key:类型]:类型定义
函数类型
function add(x:number,y:number):number{ return x+y }
const add:(x:number,y:number) =>number = (x,y) => x*y
泛型
函数式泛型
<T>(a:T) => T[]
接口式泛型
类型<T>
高级类型
联合交叉类型
- 联合类型:IA | IB,联合类型表示一个值可以是几种类型之一
- 交叉类型:IA & IB,多种类型叠加在一起成为一种类型,包含了所需的所有类型的特性
联合交叉类型可以通过: x & y | z来表示,x、y、z是类型,式子表示,必须满足x,然后满足y或者z,或者都满足。
类型保护与类型守卫
类型守卫:定义一个函数,它的返回值是一个类型谓词,生效范围为子作用域。
interface IA{a:1,a1:2}
interface IB{b:1,b1:2}
function getIsIA(arg:IA|IB):arg is IA{
return !!(arg as IA).a;
}
function log2(arg: IA | IB){
if(getIsIA(arg)){
console.log(arg.a1)
}else{
console.log(arg.b1)
}
}