引言
TypeScript就是Type+Script,解决的核心就是JS的Type缺失的问题,这个Type是类型的类不是面向对象的类; 是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。
基本数据类型
| 类型 | 举例 |
|---|---|
| 字符(String) | let a='hello' (let a:string='hello') |
| 数字(Number) | let a=888(let a:number=888) |
| 布尔值(Boolean) | let a=true(let a:boolean) |
| 数组(Array) | let a=[] let a:array<number/string....> |
| null | 表示对象值缺失 |
| undefined | 用于初始化变量为一个未定义的值 |
| 对象(object) | let a :object (let a : {name:string}直接指定对象中的属性名及属性值类类型) |
| 元组 | let x: [string, number];x = ['Runoob', 1]; // 运行正常 元组任意类型不对报错 |
| 枚举(enum) | enum Color {Red, Green, Blue};声明一组带名字的常量 |
| void(void) | function hello(): void { alert("Hello Runoob");} //表示方法没有返回值 |
| never | never 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值。 |
| any | 声明为 any 的变量可以赋予任意类型的值。 |
| unknow | 未知类型 |
类型申明的方式
- 1.字面量申明 let a=8;
- 2.定义时申明类型 let a:string;
简单讲讲几个基本类型
- 1.对象
let obj:object
obj={}
obj=funciton(){} //万物皆对象
其实适用对象的时候更希望的是限制属性值得类型 eg:
let student:{
name:string
} //{}可以用来指定对象中可以包含哪些属性及属性值的类型
let student:{
name:'Jane'
} //编译通过
student={
name:'Jane',
age:13
} // 报错 “age”不在类型“{ name: "Jane"; }”
为了避免有的属性可有可无 则添加属性的可选值
let student:{
name:string,
age?:number
} //但此时还是直接定义了具体属性 或可选属性 但是可选属性较多的不太方便
let student:{
name:string,
[propName:string]:any
} //直接自定义
- 2.元组
我们知道数组中元素的数据类型都一般是相同的(any[] 类型的数组可以不同),如果存储的元素数据类型不同,则需要使用元组。 ``
var mytuple = [10,"hello"]; // 创建元组
console.log(mytuple[0]) //10
console.log(mytuple[1])//hello
元组操作
- 元组运算
- push()
- pop()
var mytuple = [10,"Hello"];
mytuple.push(12) // 添加到元组中
console.log(mytuple)// [10,"Hello",12]
console.log(mytuple.pop()+" 元素从元组中删除") // 删除并返回删除的元素2
- 元组更新
mytuple[0] = 30 // 更新元组元素
console.log( mytuple[0]);//30
- 元组解构
var a =[10,"Hello"]
var [b,c] = a
console.log( b ) //10
console.log( c )//"Hello"
3. any任意类型
// any 任意类型 设置为any之后相当于对该变量关闭了ts类型校验
// 使用Ts时不建议使用
let d: any
d = 10
// 若不指定类型 会自动判断 隐式any
let e
e = 10
e = 'hello'
4. unkown 未知类型
unkown是一个类型安全的any;任意类型可以赋值给unkown;但unknow不能直接赋值给其他变量通常可使用类型断言或类型保护
// 未知类型
let unknow: unknown = 'name'
let name2:string='female';
let num2=66;
unknow=num2 //pass
name2=unknow//error 不能将类型“unknown”分配给类型“string”
//类型断言
name2 = unknow as string
name2 = <string>unknow
5.void
void定义函数没有返回值
let t = function(): void {
return '11111'
} //报错
const result = t()
console.log(result.length)
6.never类型
never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型
// 代码抛出错误,不可能结束
function throwError ():never{
throw new Error(“报错”);
} //立即结束
高级类型
1.交叉类型(类型的交集)
let a=string|number
let b=string|number
let c=a&b (此时c的类型检查类型为string)
2.联合类型 (联合类型理解为“或”)
let value: string | number
value = 'abc'
value = 123
}