TypeScript变量声明
基础类型变量声明
声明了一个变量,并指定该变量的类型是number类型,如果赋值不是number类型的值会红线报错
声明数字 number
let num: number
num = 11 // 正确
num = '11' // 错误,num类型是number不能赋值字符串
声明字符串 string
let str: String
str = '11'
声明布尔型 boolean
let flag: boolean
flag = false
声明任意类型 any / unknown
any
-
any可以使用任意类型,一个类型声明为any相当于对一个变量关闭了TS类型的检查
-
如果声明变量的时候没有指定数据类型,则TS解析器会自动默认该数据类型为any
let any: any
any = 11
any = true
any = '11'
let test: string
testStr = any // 不会报错
unkonwn
unkonwn实际上就是一个赋值安全的any
let unknown: unknown
unknown = 11
unknown = true
unknown = '11'
let test: string
test = unknown // 会报错
// 解决报错:使用类型断言来告诉解析器这个是字符串类型
test = unknown as string // 方式1
test = <string>unknown // 方式2
any和unknown的区别:
-
可以将any声明的值赋值给其他变量
-
不能将unkown声明的值赋值给其他变量,如果尝试将unknown声明的变量赋值给其他类型的变量,赋值时会红线报错
-
unknown声明的变量可以赋值给用any声明的变量,也可以将any声明的变量的值赋值给unknown
用于表示函数返回 void never
void
-
函数没有返回的时候使用 void,函数有返回值时,按照返回值类型正常设定
-
return可以返回undefined,但能返回null
function fn():void {
return
}
function fn():void {
return undefined
}
function fn():void {
return null // 报错
}
function fnNum():number {
return 11
}
function fnStr():string {
return '11'
}
never
永远都不会有结果返回,包括 undefined 和 null
function fnNever(): never{
throw new Error('error')
}
基础类型变量声明——字面量
也可以通过字面量的方式来进行声明,赋值的时候需要与字面量一致,否则会红线报错
-
一般不会用自面量的形式进行声明,仅作了解
-
有一些特殊情况可以考虑使用,如声明字符串的时候(这是一个特殊例子)
声明数字
let num1: 10
num1 = 10 // 正确
// num1 = 11 // 错误
申明字符串
使用 | 来链接多个类型,在赋值时,这两个类型都可以作为值来给变量赋值
let str1: 'male' | 'female'
str1 = 'male'
str1 = 'female'
复杂数据类型变量声明
声明一个对象 object
一般不会用object来限制一个对象,因为这样的限制太广泛了
let obj: object
let fn: object = function(): void{
return
}
-
声明一个对象使用 {}
-
用于指定对象中可以包含哪些属性
-
语法:{属性名: 属性值, 属性名: 属性值}
-
在属性后面加?,表示可选属性
let obj1: {
name: string
age?: number
}
obj1 = {
name: 'name',
age: 11
}
注:[key: string]: any表示任意类型的属性
let obj2: {
name: string,
[key: string]: any
}
obj2 = {
name: 'name',
age: 11,
adult: true
}
使用函数结构的类型声明 function
-
定义方法的参数与返回值类型
-
在使用对应方法的时候传入正确的值
let fn: (prop1: string, porp2: number) => string
fn = function (name: string, age: number): string{
return name + age
}
声明一个数组 array
-
声明一个只能存放字符串的数组和一个只能存放数字的数组
-
声明数组的时候有两种方式 : string[] 或 : Array<number>
let arrStr: string[]
arrStr = ['1', '2', '3']
let arrNum: Array<number>
arrNum = [1, 2, 3]
声明一个元组 tuple —— JS没有
-
元组就是固定长度的数组
-
: [string, number] 数组长度固定为2,索引1的值是string,索引2的值是number
let arr: [string, number]
arr = ['name', 11]
声明一个枚举 enum —— JS没有
-
定义一个枚举类型
enum Gender{
male = 0,
female = 1
}
let obj: {
name: string,
gender: Gender
}
obj = {
name: 'name',
gender: 1
}
console.log(obj.name + (obj.gender === Gender.male ? 'male' : 'female'))
定义类型别名
-
使用type定义一个可使用的类型,比如字面量
-
在申明一个变量的时候就可以将这个别名当类型来进行使用
type zeroToNine = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
let number: zeroToNine
number = 0
number = 10 // 错误