TS学习之路001-数据类型
cirzear / / 学习之路 / 阅读量 4076

Js的数据类型包括: number,string,null,undefined,object,symbol,boolean,bigint *而TS中增加了*void any never 元组 枚举 高级类型 以下为数据类型的学习笔记

// 原始类型
let bool: boolean = true;
let num: number = 41;
let str: string = 'sad'

// 数组
let arr: Array<number> = [1,2,3] //不能添加字符串类型

// 元组
let tuple: [number,string] = [0,'1']
tuple.push('2')
console.log(tuple)

// 函数
let add =(x:number,y:number):number=>x+y  //最后结果的number类型 ts有类型推断,不写也可以
let compute: (x:number,y:number)=>number
compute = (a,b)=>a+b;

// 对象
// let obj: object = {x:1,y:2}   这里不能单纯定义obj是对象类型,应如下定义:
let obj: {x:number,y:number} = {x:1,y:2}
obj.x = 3

// symbol
let s1: symbol = Symbol()
let s2 = Symbol()
console.log(s1 === s2)

// undefined null
let un: undefined = undefined //只能被赋值为undefined
let nu: null = null 

// void 一个没有任何返回值的函数
/*
原本js中执行以下代码会替换全局所有的
使用void 类型后就会解决这种问题
(function(){ 
    var undefined  = 0
    console.log(undefined) 
})()
输出 0 即所有的undefined都被替换为0
*/
let noReturn = () => {}

// any
let x 
x = 1
x = []
x = () => {}

// never 
/*
永远不会有返回值的函数类型 
以及死循环函数 
*/
let error  = () => {
    throw new Error('error')
}
let endless = () => {
    while(true) {}
}

枚举类型的学习


// 枚举的实现原理。  数字枚举=>反向映射

// 数字枚举
enum Role{
    Reporter = 1,
    Developer,
    Maintainer,
    Owner,
    Guest
}
console.log(Role.Reporter)
console.log(Role)

// 枚举成员  定义之后无法修改
enum Char{
    // const member  编译时计算出结果,以常量形式出现在运行时环境
    a,              // 无初始值
    b = Char.a,     //对已有枚举成员的引用
    c = 1 + 3,      //常量的表达式
    // computed member  非常量的表达式  会被保留到程序的执行阶段再计算
    d = Math.random(),
    e = '123'.length,
    //f, 必须具有初始值
}

// 常量枚举  会在编译阶段被移除(编译后没有任何代码)
const enum Month{
    Jan,
    Feb,
    Mar
}
// 只需要其中的值 不需要对象的时候使用
let month = [Month.Jan, Month.Feb,Month.Mar]

// 枚举类型
enum E {a,b}
enum F {a = 0, b = 1}
enum G {a = 'apple', b = 'banana'}

let e:E = 3
let f:F = 5
//  e === f  不同枚举类型无法比较

let e1 : E.a = 1
let e2 : E.b = 1
let e3 : E.a = 1
// e1 === e2
e1 === e3

let g1 : G = G.b
let g2 : G.a = G.a
支付宝捐赠
请使用支付宝扫一扫进行捐赠
微信捐赠
请使用微信扫一扫进行赞赏
有 0 篇文章