一.typescript特点
TypeScript是强类型, 它提供了一套静态检测机制,如何我们编码事中途变换变量的类型,ts就会在报错,帮助我们在编码时发现错误
- 支持最新的JavaScript新特特性
- 支持代码静态检查
- 支持诸如C,C++,Java,Go等后端语言中的特性
(枚举、泛型、类型转换、命名空间、声明文件、类、接口等)
二.基础类型
1.语法 (变量): type = (值)
1.数字类型
let sum: number=1;
2.字符串类型
let name: string = '小小静'
3.数组类型
各个元素的类型必须得一致
1.方法1定义:在元素类型后面加 []
let list: number[] = [1, 2, 3]
let list: string[] = ['1', '2', '3']
let list: any[] = [1, '123']
2.方法2定义:使用数组泛型,Array<元素类型>
let list: Array<number> = [1, 1]
let list: Array<string> = ['1', '123']
let list: Array<any> = [1, '123']
4.元组(Tuple)
元组:是一个已知数量长度,类型的数组,各个元素的类型可以不同 元组继承于数组,但是比数组拥有更严格的类型检查
let tupleList: [number, string] = [1, '123']
let tupkeList: [number, number] = [1, 2]
5.枚举类型(enum)
- 枚举类型是 TS 为 JS 扩展的一种类型,在原生的 JS 中是没有枚举类型的,
- 枚举用于表示固定的几个取值
5.1数字枚举
1.定义枚举
enum gender { male,female }
默认从0开始为元素赋值: male==0,female==1
2.可以手动赋值
enum gender { male=2,female }
可以手动赋值从2开始为元素赋值: male==2,female==3
enum gender { male=2,female=4 }
可以全部手动赋值: male==2,female==4
3.获取元素对应得值
enum gender { male=2,female=4 }
let val = gender.male //2
4.根据值映射相应得字段名称
enum gender { male=2,female=4}
let val = gender[4] //female
5.2字符串枚举
类似于数字枚举但 字符串不支持正反向映射
1.定义枚举
enum season {
spring = 'a1',
summer = 'a2'
}
2.获取元素对应得值
let val = season.spring //al
5.3异构枚举
可以混合字符串和数字成员
1.定义枚举
enum season {
spring,
summer = 'a2'
}
console.log(season.spring)
console.log(season[0])
数字可以正反响映射,字符串不行
5.4常量枚举
在编译阶段就会被移除,没有对应的js 场景:当不需要一个对象,而只需要对象的值时,可使用常量枚举。会减少在编译环境上的代码
1. 用const定义
const enum season {
spring,
summer
}
6.枚举得本质
1.数字枚举
枚举 可以正反向同时映射的原因
var gender;
(function (gender) {
gender[gender["male"] = 0] = "male";
gender[gender["female"] = 8] = "female";
})(gender || (gender = {}));
详解:
1. var gender; 声明gender变量并且初始值{}
2.将gender对象 作为自执行函数的 实参传入
(function (gender) {})(gender || (gender = {}))
3.给gender对象 的 “male” 属性赋值为 0
gender['male'] = 0
输出结果: {male:0}
4.给gender对象 新增一个 属性名为“0” 的属性,并且给其赋值
gender[gender["male"] = 0] = "male";
输出结果:{0: 'male', male: 0}
5.最后结果:
gender= {
"male" : 0,
"0": "male"
}
gender['0'] ->male
gender['male']-> 0
2 .字符串枚举
var season;
(function (season) {
season["spring"] = "a1";
season["summer"] = "a2";
})(season || (season = {}));
7.任意类型(any)
声明为 any 的变量可以赋予任意类型的值 检查器不会对类型进行检查
let list: any[] = [1, true, "free"];
let sum:any = 12;
8.void类型
void与any正好相反, 表示没有任何类型, 一般用于函数返回值。 在TS中只有null和undefined可以赋值给void类型
function add(): void { console.log('888')}
add()
三.类型推论 和 类型断言
1.作用
1.解释型强制类型转换 2.就是告诉编译器,这个不用做检查,我知道自己在干嘛
2.语法
值 as 类型 或 <类型>值
let le n: number = (<string>someValue).length;
let len: number = (someValue as string).length;
3.例子
一个any类型的变量, 但是我们明确的知道这个变量中保存的是字符串类型 此时就可以通过类型断言将any类型转换成string类型, 使用字符串类型中相关的方法了。
let str: any = 'siidid'
let len = (str as string).length //使用了字符串的length方法