TS学习笔记1:基础数据类型

157 阅读3分钟

点击此处即可查看本文所属专栏的所有文章

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. 枚举类型

枚举类型可分为数字枚举和字符串枚举

  1. 数字枚举 数字枚举中,每一个成员都有一个固定的值。如果你在声明枚举型时没有给某一项赋值,则会自动从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'
  1. 字符串枚举 字符串枚举中,每个成员都必须用字符串字面量,或另外一个字符串枚举成员进行初始化。
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 类型 写法。