TypeScript ——javascript的超集(superset)
任何一种javascript运行环境都支持,功能更为强大,生态也更健全,更完善
TypeScript_前端领域中的第二语言
缺点一:语言本身多了很多概念,如果接口,泛型之类的,但是属于渐进式
缺点二:项目初期,typescript会增加一些成本,因为一开始会写很多的申明,对象函数之类的,如果是长期大型的项目可以使用typescript,因为这些声明都是一劳永逸的
快速上手
yarn init –yes
yarn add typescript –dev
会在node_modules下的bin多了一个tsc文件,用来编译typescript代码
构建之后会生成.js结尾的文件名一样的文件,已经把es6和typescript的代码转成了es5的代码
配置文件
yarn tsc –init
根目录下会生成tsconfig.json的文件
Target:编译后的语言
Module:输出的代码以什么样的方式模块化
OutDir:编辑结果输出到的文件夹
RootDir:ts的源代码所在的文件夹
SourceMap:true 开启源代码映射,调试的时候可以直接调试源代码很方便
Strict:true开启了严格模式
…
原始类型Primitive Types
这三种类型ts非严格模式里是可以为空的,上一篇文件里的flow不可以
标准库声明
标准库就是内置对象所对应的声明
Symbol是es6的内置对象,配置文件target如果是es5的话只能调用es6的标准库,所以symbol类型会报错,es6里的都会报错,比如promise,
可以把target改成es2015
也可以在lib里指定标准库
中文错误消息
yarn tsc –locale zh-CN
vscode里的配置
Object类型
数组类型
和flow中几乎完全一致
强类型可以约束传入的值必须都是数字的数组
元组类型
是一个特殊的数据结构,是一个明确元素数量和类型的一个数组
得到的键值也是一个元组
枚举类型
postStatus里的值可以不赋值,不赋值是自动从0开始自增长
枚举类型编译后,会生成一个双向的键值队对象,可以通过值获取键,也可以通过键获取值
函数类型
参数的类型是number,返回值的类型是string,参数个数也要相同
入参加了?或者有了默认值,就是可有可无的可选参数。
…rest参数个数不受限制
接收的变量约束,一般定义在接口上
任意类型 any
Any类型不会有任何的检查,所以会存在类型安全的 问题
隐式类型推断
在ts中,如果没有明确通过类型注解去标注一个变量的类型,那ts会根据这个变量的使用情况去推断这个变量的类型,这种特性就是隐式类型推断
Ts就会推断成age为number,再赋值成string就会报错,当无法推断的时候就会赋值any
类型断言
在有些特殊的情况下,ts无法推断出这个变量的具体类型
告诉ts res是一个number类型,类型断言不是类型转换
接口Interfaces
一种约定,约束对象的结构
编译es5后
接口中的可选成员,只读成员,动态成员
Subtitle是可选成员,summary是只读成员,初始化后就不能再修改,cache动态成员
类的基本使用
描述一类具体事物的抽象特征,用来描述一类具体对象的抽象成员,es6以前,函数+原型来模拟实现 类,es6开始有了class,在ts中增强了class的相关语法
ts中类的属性必须有一个初始值
类的访问修饰符
Private私有的,只能在类的内部使用
public公用的,默认的
protected 受保护的,也不能在外部使用,子类中可以
如果在类的构造函数中添加private,只能通过static静态去访问
类的只读属性
Readonly初始化后就不可以再修改
类与接口
抽像类
Absract,只能被继承,不能通过new的方式去实例化了
泛型