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