TypeScript学习
开发环境搭建
1. 下载并安装Node.js
2. 使用npm 全局安装typescript
npm i -g typescript
3. 创建ts文件
4. 使用tsc对ts文件进行编译,转换成js文件
tsc xxx.ts
基本类型
1. 类型声明
- 通过类型声明可以指定TS中变量(参数、形参)的类型;指定类型后,当为变量赋值时,TS编译器会自动检查值是否符合类型声明,符合则赋值,否则报错
- 简而言之,类型声明给变量设置了类型,使得该变量只能存储某种类型的值
- 语法:
1 let 变量: 类型; 2 3 let 变量: 类型 = 值; 4 5 function fn(参数: 类型, 参数: 类型): 类型{ 6 ... 7 }
2. 自动类型判断
- TS拥有自动类型判断机制
- 对变量的声明和赋值时同时进行的,TS编译器会自动判断变量的类型
- 直接赋值可以省略变量声明
3. 类型
类型 | 例子 | 描述 |
number | 1,-1,1.1 | 任意数字 |
string | "hello", "world" | 任意字符串 |
boolean | true,false | 布尔值 |
object | {name: "zhangsan"} | 任意js对象 |
array | [1,5,7] | 任意js数组 |
字面量 | 其本身 | 限制变量的值就是该字面量的值 |
any | * | 任意类型(和js没区别,不建议使用) |
unknown | * | 类型安全的any |
void | 空值(undefined) | 没有值(或者undefined) |
never | 没有值 | 不能是任意值 |
tuple | [2,5] | 元素,ts新增类型,固定数组长度 |
enum | enum{A,B} |
枚举,ts中新增类型 |
- 字面量
-
1 let color: 'red' | 'blue' | 'black' 2 let num: 1 | 4 | 9
// 可以使用字面量指定变量类型,也可以确定变量的取值范围,color只能取red blue black其中一个
-
- any
- 如果不指定类型,ts解析器自动判断类型为any,所以不建议直接写成 let d;
- 注意:如果将any类型的b赋值给其他类型的a,那么a的类型也会变成any(这也是和unknown的区别之一)
- 使用方式和js没区别
-
1 let d: any =5; 2 d = 'hello'
3 d = true
- unknown
- 注意:如果将any类型的b赋值给其他类型的a,那么会报错。
- 可以使用类型断言来处理报错
- void
- never
- 表示不会返回结果,但是可以抛出错误
-
1 function error(message: string):never { 2 throw new Error(message) 3 }
- tuple
-
1 // 固定长度的数组,并且数组中的类型可以不一样 2 let x:[string, number] 3 x=['hello', 10]
-
- enum
-
1 enum Color { 2 Red, 3 Green, 4 Blue, 5 } 6 let c: Color = Color.Green; 7 8 enum Color { 9 Red = 1, 10 Green, 11 Blue, 12 } 13 let c: Color = Color.Green; 14 15 enum Color { 16 Red = 1, 17 Green = 2, 18 Blue = 4, 19 } 20 let c: Color = Color.Green; 21 // 另一个例子 22 enum Gender{ 23 Male = 0, 24 Female = 1 25 } 26 let i:{name: string, gender:Gender} 27 i = { 28 name:'冲', 29 gender:Gender.Male // 如果gender:"Male",占内存,可以使用枚举类型的方式改善 30 }
-
4. 类型断言
有些情况下,变量的类型对于我们来说是很明确,但是TS编译器却并不清楚,此时,可以通过类型断言来告诉编译器变量的类型,断言有两种形式:
- 第一种:
1 let someValue: unknown = "this is a string"; 2 let strLength: number = (someValue as string).length;
- 第二种:
1 let someValue: unknown = "this is a string"; 2 let strLength: number = (<string>someValue).length;
5. 类型别名
1 type myType= 1|2|3|4|5|6 2 let mytype1: myType 3 let mytype2: myType