TS语法一 基础类型

一 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()方法定义的变量

猜你喜欢

转载自blog.csdn.net/LittleMoon_lyy/article/details/124075097