1. 布尔类型
let bool: boolean = false
2. 数字类型
let num: number = 123
3.字符串类型
let str: string`
`str = 'abc'
4.数组类型
声明数组有以下两种写法:
//声明一个数组,数组中只允许存入数字型
let arr1: number[] `
`let arr2: Array<number>
声明的数组中允许多种数据类型:
//声明一个数组,数组中允许存入数字和字符
let arr3: (string|number)[] 串型
let arr4: Array<string|number>
5.元组类型
元组类型是js中不存在的数据类型,可以看作是一个特殊的数组,且这个数组严格限定了长度及每一项的数据类型。当给元组赋值时,如不符合声明规则即报错
// 声明一个名为tuple的长度为3的元组,且要求第0位为字符串型,第1位为数字型,第二位为布尔型
let tuple: [string,number,boolean]
tuple = ['a', 123, false]
6. 枚举类型
枚举类型可分为数字枚举和字符串枚举
- 数字枚举 数字枚举中,每一个成员都有一个固定的值。如果你在声明枚举型时没有给某一项赋值,则会自动从0开始赋值,后面的每一项自加1。
enum Roles {
SUPER_ADMIN,
ADMIN = 3,
USER
}
console.log(Roles.SUPER_ADMIN) // 0
console.log(Roles.ADMIN) // 3
console.log(Roles.USER) //4
数字枚举成员具有反向映射特性:
console.log(Roles[Roles.USER]) // 'USER'
- 字符串枚举 字符串枚举中,每个成员都必须用字符串字面量,或另外一个字符串枚举成员进行初始化。
enum StringEnum {
Up = "UP",
Down = "DOWN",
Left = "LEFT",
Right = "RIGHT",
}
console.log(StringEnum.Up) // 'UP'
7. any类型
字如其名,any类型可以存储任意数据类型的值,慎用。
let value: any
value = 123
value = []
声明数组时,类型限制设为any,则数组中的成员即可不受限制得存储任意值
let arr1: any[] = [1,'a']
8. void类型
void型可以赋两种值,即null 和 undefined。当发现给void型赋值null报错时,请将tsconfig.json 中的strictNullChecks设为false。
let v: void
v = null
v = undefined
9.null类型
与js中的null类型一样,仅可赋值null
let n: null
n= null
10.undefined类型
let u: undefined
u = undefined
11.never类型
never型是完全没有返回值的类型,只会出现在函数阻断中。同时需要注意的是,never是任何类型的子类型。
// 抛错函数
const errorFunc = (message: string): never => {
throw new Error(message)
}
// 死循环函数
const infiniteFunc = (): never => {
while(true){}
}
12.类型断言
类型断言让程序员在比ts更了解某个值的类型的前提下,可以手动指定一个值的类型,用欺骗手段让报错的代码可以编译通过。如以下示例函数,获取传入信息的length属性,在js中执行不会有任何问题。
const getLength = target => {
if(target.length || target.length === 0) {
return target.length
}else {
return target.toString().length
}
}
但是如果在ts中,限定了传入参数的数据类型,则代码会在读取target.length时因 ‘number类型没有length属性’ 而报错。此时,使用类型断言,即可让代码继续执行。
const getLength = (target: string|number) => {
if((<string>target).length || (target as string).length === 0) {
return (<string>target).length
}else {
return target.toString().length
}
}
类型断言有两种写法,一种是在变量前加尖括号表示(<类型>值),如<string>target。另一种是值 as 类型,如target as string这样的写法。注意在jsx中,为了避免将<string>识别为标签,因此仅支持值 as 类型 写法。