一 ts的基础类型
包括:
- 布尔值
- 数值
- 字符串
- 数组
- 元祖
- 枚举值
- any
- void
- null和undefined
- never
- object
- 类型断言
let bool:boolean=true
let num:number=333
//同时支持二进制,八进制,十进制,十六进制的表示
num = 0b1111011 // 二进制
num = 0o173 // 八进制
num = 0x7b // 十六进制
let str:string = 'aaa'
str = `数值是:${num}`
let arr1:number[] = [1,2,3]
let arr2:Array<number> = [1,2,3]
let arr3:Array<number|string> = [1,2,'3']
let arr4:(number|string)[] = [1,2,'3']
//元祖(固定长度和类型的数组)
let tuple:[string,number,boolean]
tuple = ['a',1,false]
//枚举
enum Roles {
SUPER_ADMIN,
ADMIN=2,
USER
}
console.log(Roles.SUPER_ADMIN) //0
console.log(Roles[2]) //ADMIN
//any
let value:any
value=2
value=[1,2,3]
let arr5:any[]=[1,'3', true]
//void
let v:void = undefined
v=null
//null和undefined(ts中既是值也是类型)
let u:undefined
u=null
let n:null
n=undefined
//可以将null和undefined赋给其他任意类型(strictNullCheck为false的情况下)
num = null
num = undefined
//object
let obj1:object={name:'lyy'}
//类型断言(as),后续也可以用类型保护,jsx语法只支持as
const getLength = (target:string|number):number=>{
if((<string>target).length || (target as string).length===0){
return (<string>target).length
}else{
return target.toString().length
}
}
二 Symbol数据类型
Symbol永远都是独一无二的,且只能传入string或number类型
// 1.定义
const s1 = Symbol()
console.log(s1) //Symbol()
const s2 = Symbol()
console.log(s1===s2) //false
const s3 = Symbol('lyy')
console.log(s3.toString()) //Symbol(lyy)
console.log(Boolean(s3)) //true
const s4 = Symbol('lyy')
console.log(s3===s4) //false,即使传入相同的值也是不同的Symbol
//2.对象中的使用
const user = 'name'
const age = 'age'
const sex = Symbol('sex')
const info = {
[user]:'lyy',
[`user${age}`]:18,
[sex]:'female'
}
console.log(info) //{name: 'lyy', userage: 18, Symbol(sex): 'female'}
info.address = 'NJ' // 新增address属性
info[user] = 'lyyyy' // 修改name属性
info[sex] = 'male' //修改Symbol只能用[],不能用.
//3.遍历
//注意这几种方法的遍历结果是否包含Symbol类型
for(const key in info){
console.log(key)
}
//name
//userage
//address
console.log(Object.keys(info)) //['name', 'userage', 'address']
console.log(Object.getOwnPropertyNames(info)) //['name', 'userage', 'address']
console.log(Object.getOwnPropertySymbols(info)) //[Symbol(sex)]
console.log(Reflect.ownKeys(info)) //['name', 'userage', 'address', Symbol(sex)],该方法可以获取到所有属性,包括Symbol类型的属性
//4.Symbol的方法:Symbol.for()以及Symbol.keyFor()
//注意,Symbol.for()只能传入string,且创建时如果发现已有相同key的Symbol,如果有则不新建
const s4 = Symbol.for('test')
const s5 = Symbol.for('test')
const s6 = Symbol.for('test2')
console.log(s4===s5) //true
console.log(s4===s6) //false
console.log(Symbol.keyFor(s6)) //test2
console.log(Symbol.keyFor(s3)) //undefined,keyFor传入的必须是通过Symbol.for()方法定义的变量