[toc]
TypeScript是js的超集,是一个可选的、静态的类型系统
官网:http://www.typescriptlang.org
中文网:https://www.tslang.cn
js的原罪
js语言本身的特性,决定了它无法适应大型的复杂项目
弱类型:可以修改变量的数据类型
解释型:只有在运行时才会确定语言的正确性
使用了不存在的变量、函数或成员
把一个不确定的类型当做一个确定类型处理
在使用对象的属性时,而这个对象却是null或者undefined
TypeScript
- 超集:包含了js的所有功能
- 类型系统:对代码中所有的标识符(变量、函数、类型、返回值)进行类型检查。类型检查是在编译的时候,而非运行时
- 可选的:可用可不用
- 静态的:无论是浏览器还是node,都无法直接识别ts代码。
搭建TS开发环境
安装TS
全局安装typescript,它包含tsc命令,进行ts文件的编译
$ sudo npm install -g typescript
TS配置文件
生成配置文件。当使用tsc进行编译时,如果再跟上文件名就会忽略配置文件
$ tsc --init## 会生成一个配置文件{"compilerOptions": { /* 基础编译配置 */"target": "es5", /* 配置编译目标代码的版本标准 */"module": "commonjs", /* 配置编译目标使用模块化标准 */"lib": ["es2016"], /* 指定在编译中包含库文件 */"outDir": "./dist", /* 指定在编译后的文件路径 */},"include":["./scr"] /* 指定在编译的目标目录 */}
使用第三方库简化流程
@types/node
@types是一个ts官方的类型库,其中包含了很多对js代码的类型描述。
$ npm install @types/node --save-dev
ts-node 它是将ts代码在内存中完成编译,同时完成运行
$ npm install ts-node -g# 使用$ ts-node ./scr/index.ts
nodemon 用来监测文件的变化,并进行重启
$ npm install nodemon -g# 基本使用-监测所有文件变化$ nodemon --exec ts-node ./scr/index.ts# 监测ts文件变化 -e ts$ nodemon -e ts --exec ts-node ./scr/index.ts# 监测src文件夹下的ts文件变化 --watch src -e ts$ nodemon --watch src -e ts --exec ts-node ./scr/index.ts
TS基本语法
如何进行类型约束
- 仅需要在变量、函数的参数、函数的返回值位置后加上
:数据类型 - ts在很多场景中可以完成类型推导
-any: 表示任意类型,对该类型,ts不进行类型检查
基本类型
- number:数字
- string:字符串
- boolean:布尔值
types[]/Array<types>:数组(types为数据类型)- object: 对象
- null和undefined:它们是所有数据类型的子类型,可以赋值给其他类型,但是这样就会存在js中的同样问题,可以通过在配置文件中添加
"strictNullChecks": true来更严格的进行空类型检查,而null和undefined还能赋值给自身。
其他常用类型
联合类型
将多种类型混合使用,通过类型保护进行判断,比如string | number
类型保护:当对某个变量进行类型判断之后,在哦按段的语句块中便可以确定它的确切类型,typeof只能触发简单的数据类型保护void类型
通常用与约束函数的返回值,表示该函数没有任何返回值never类型
通常用与约束函数的返回值,表示该函数永远不可能结束字面量类型
使用一个值进行约束,当数据类型为number、string、boolean、array时,必须等于字面量,当是对象是,可以约束对象内属性的类型,且必须有元祖类型(Tuple)
一个固定长度的数组,并且数组中每一项元素的类型any类型
any类型可以绕过类型检查,因此,any类型的数据可以赋值给任意类型枚举类型
枚举通常用与约束某个变量的取值范围。
类型别名
对已知的一些类型定义名称
type User={name:string,age:number,gender:"男"|"女"}let u:User = {name:"guohh",age:18,gender:"男"}function getUser():User[]{return u;}
