常见的三种值类型

数字类型
// 申明一个数字类型的值let a: numbera = 10
字符串类型
// 申明一个字符串类型的值let b: string = 'hello'
布尔类型
// 申明一个bool类型的值let c: boolean = true

PS:类型正文

冒号 + 类型的叫类型正文

: string这种叫类型正文

其余常见类型

字面量类型
// 字面量进行类型申明(字面量:即就是这个值自身)let aa: 10// a批改为其余值就会报错aa = 11// 理论开发中很少这么用,然而咱们能够这么用// 申明一个变量等于男或者女let sex: 'male' | 'female'// 咱们应用的时候就能够赋值其中一个值,赋值其余值就会报错sex = 'male'sex = 'female'sex = 'hello'
联结类型
// | 线能够用来连贯多个类型(联结类型)// 除了用在字面量中,惯例的应用当中有的更多let bb: boolean | numberbb = truebb = 123// 赋值字符串,就错了bb = 'hi'
any类型
// 申明任意类型的数据// any示意任意类型,一个变量设置为any后相当于对该变量敞开了TS的类型检测let cc: anycc = 123cc = truecc = 'hi'// 隐式any,即申明,然而不设置类型,如下let dddd = 123
unknown类型
// unknown 示意未知类型let ee: unknownee = 123ee = trueee = 'hi'
any和unknown比拟
// 那么any和unknown有什么区别呢?// any能够赋值给任何变量let ff: stringff = cc// unknown实际上就是一个类型平安的any// unknown类型的变量不能间接赋值给其余变量let gg: stringgg = ee// 如何解决这种报错呢?// 1.类型判断if(typeof ee === 'string') {    gg == ee}// 2.类型断言(意思是,ee就是一个string,你就释怀用了)gg = ee as stringgg = <string>ee
PS:类型断言
  • 断言语法

    • 1.变量 as 类型
    • 2.<类型>变量
void类型
// void用来示意空,以函数为例,示意没有返回值的函数function fn():void {    console.log(11111)}
// never示意永远不会返回后果function fn2(): never {    throw new Error('出错了')}
object类型
// object示意一个js对象let obj: objectobj = {}obj = function() {}// js中对象太多了,个别不像下面这样申明,那么咱们在下面时候用这种模式呢?// 比方咱们申明一个变量,然而咱们心愿变量中蕴含某个值时let obj2: {name: string}// 这样是正确的obj2 = {name: '景天'}// 这样就会报错obj2 = {}// 写多了也会报错obj2 = {name: '景天',age:18}// 那么咱们就是要age,而且age也不确定有没有,怎么写呢?let obj3: {name: string,age?: number}// 这样都正确obj3 = {name: '景天'}obj3 = {name: '景天',age:18}// 然而理论开发中,咱们还会有不确定有多少其余属性值,怎么解决呢?let obj4: {name: string, [propName:string]:any}// 这样的话,除了要求的值,其余轻易写不写,写什么都无所谓了obj4 = {    name: '景天',    age: 18,    c: true}
函数
// 如何设置函数的类型申明呢?// 这示意函数两个参数,都是number类型,返回值也是number类型let fn1: (a:number,b:number) => numberfn1 = function(n1,n2) {    return n1 + n2}// 函数中应用另一种类型限度// ): number是限度返回值的类型的function add(a: number,b:number): string {    return String(a + b)}
数组
/*    array,两种申明形式(这也是一种泛型的写法)    1. 类型[]    2. Array<类型>*/// 纯字符串数组let arr: string[]arr = ['a','b','c']// 纯数字数组let arr2: Array<number>arr2 = [1,2,3]
元组
// tuple(元组):固定长度的数组let yuanzu: [string,number]yuanzu = ['111',222]
枚举
// enum: 枚举// 申明一个枚举类enum Gender {    male = 1,    female = 0}let hh: {name: string,gender: Gender}hh = {    name: '景天',    gender: Gender.male}
类型的别名
// 类型的别名type myType = string// 这相当于还是stringlet ii: myType// 然而这样的话,通常没什么意义,而咱们用字面量类型的时候,有时候能够应用type jjType = 1 | 2 | 3 | 4 | 5 | 6 // 这样无论咱们多少个中央应用,都能够间接用了let jj: jjTypelet kk: jjTypelet ll: jjType// 任何类型都能够有别名// 比方objecttype obj = {    x:number,    y:number}// 别名的扩大// 一个新的obj1在下面的obj的根底上扩大type obj1 = obj & {    z: number}

JS在ES6当前加的两个类型

bigint
  • 意为比拟大的整数
  • ES2020当前增加

    // 括号外面能够是number 和 stringconst bigNumber: bigint = BigInt(123)const bigNumber2: bigint = 456nconsole.log(bigNumber)   // 123n,打印发现是有个n在数字前面,然而咱们应用值得时候,是没有n的console.log(bigNumber2)  // 456n
symbol
  • 意为全局惟一援用

    const firstName = Symbol('name')