TS基本数据类型

122 阅读3分钟

基本类型约束

ts是一个可选的静态类型约束,是js的超集,简单来说就是给js加上类型系统,让每个参数有明确的意义

TS的数据类型

typescript中为了使编写的代码更规范,更有利于维护,增加了类型校验,写 ts 代码必须指定类型。 在typescript中主要给我们提供了以下数据类型:

  • number
  • string
  • boolean
  • null
  • undefined
  • array
  • object

undefined和null是所有其他类型的子类型,它们可以赋值给其他类型 通过添加strictNullChecks:true,可以获得更严格的空类型检查,null和undefined赋值给自身

let num: number = 0
let str: string = 'abc'
let flag: boolean = false
let a: undefined = undefined
let b: null = null
let array: number[] = [1,2,3]  // number类型的数组 等同于 let array: Array<number> = [1,2,3]
let obj:object = {
    name: "zero",
    age: 18
}

其他常用类型

联合类型

  • 多种类型任选一个
let status: number | string  // status可以是number或者是string

void类型

  • 通常用于约束函数的返回值,表示该函数没有任何返回
function test():void {
    console('void类型')
}

never类型

  • 通常用于约束函数的返回值,表示该函数永远不可能结束,但是没有类型是 never 的子类型,这意味着声明 never 的变量只能被 never 类型所赋值。
 function throwError(msg: string):never {
     throw new Error(msg)
 }

字面量类型

  • 使用一个值进行约束
let gender: "female" | "male"
gender = "female"

// 对象必须有这2个值
let user = {
    name: string
    age: number
}
user = {
    name: 'zero',
    age: 18
}

元祖类型(Tuple)

  • 一个固定长度的数组,并且数组中每一项的类型确定,就是赋值的类型、位置、个数需要和定义的类型、位置、个数一致。
let tuple: [string, number]
tuble = ["zero", 18]

any类型

  • any类型可以绕过类型检查,因此,any类型的数据可以赋值给任意类型
let data:any = 123

类型别名

  • type 类型名称 ...,对已知的一些类型定义名称
type user = {
 name: string
 age:number
 gender: "female" | "male"
}

let u: user

u = {
    name: 'zero',
    age: 18,
    gender: 'female'
}

function getUser():user[]{
    return []
}

getUser()

函数的相关约束

  • 函数重载: 在函数实现之前,对函数调用的多种情况进行声明
// 两个是数字,相乘返回;两个是字符串,拼接返回
// 函数重载,对函数调用的情况进行声明
function combine(a:number, b:number):number;
function combine(a:string, b:string):string;
function combine(a:number | string, b:number | string):number | string{
    if (typeof a === "number" && typeof b === "number") {
        return a*b
    } else if (typeof a === "string" && typeof b === "string"){
        return a+b
    }
    throw new Error("两者必须是相同的类型")
}

const res = combine(1,2)
const result = combine('dog','pig')
  • 可选参数: 可以在某些参数名后加上问号,表示该参数可以不用传递。可选参数必须在参数列表的末尾
function sum(a:number, b:number, c?:number){
    if(c) {
        return a+b+c
    } else {
        return a+b
    }
    
}

sum(3,4)
sum(3,4,5)

枚举

  • 枚举是一个一个罗列出来,通常用于约束某个变量,某个变量的取值范围
  • 字面量类型的问题
    • 在类型约束位置,会产生重复代码,可以使用类型别名解决该问题
    • 逻辑名称和真实的值产生混淆,会导致当修改真实值的时候,产生大量的修改
  • 枚举会出现在编译结果中,编译结果中表现为对象

规则:

  • 枚举的值可以是数字或字符串
  • 数字枚举的值会自动自增
  • 被数字枚举约束的变量,可以直接赋值为数字
enum 枚举名 {
    枚举字段1 = 值1,
    枚举字段2 = 值2
}

enum Gebder{
    male = '男',
    female = '女'
}

let gender: Gender;
gender = Gender.male;
gender = Gender.female

本文完~