TypeScript学习笔记03

43 阅读2分钟

Symbol

1.symbol

// 1.使用
let a1:symbol=Symbol(1)
let a2:symbol=Symbol(1)

// symbol 单独创建的内存地址 唯一的
console.log(a1,a2) // Symbol(1)  Symbol(1) 
console.log(a1===a2) // false

//2. for方法 
//  for方法使用的时候会去全局的symbol对象之中查找,如果有直接引用,没有的话就创建一个
console.log(Symbol.for("sysy")===Symbol.for("sysy"))

// 3. for in 不能读取到symbol
// 4. Object.keys() 也不能读取到
// 5. Object.getOwnPropertyNames() 也不能读取

// 6. Object.getOwnPropertypeSymbols()只能读取symbol属性

// 7. 解决方式
// es6提供的新方法
Reflect.ownkeys(obj)


迭代器 生成器

  1. 生成器 generator
function* gen () {
    yield "6666" //可以跟同步或者异步
    yield Promise.resolve('7777')
}

const man=gen()

console.log(man.next()) // done false
console.log(man.next()) // done false
console.log(man.next()) // done true

  1. 迭代器 iterator
/* es6新增数据类型 */
// set

let set:Set<number>=new Set([11,222,33,,55,1,2,1,2]) // 天然去重

// map
let map:Map<any,any>=new Map()
// 设置 可以以引用类型当键名
map.set(obj,6666)
// 取值
map.get(obj)


/* 迭代器 */

// 语法糖 for of
// for of 对象不能使用,因为对象没有iterator接口
// 解构的原理也是去调用 iterator


// ????对象的解构赋值如何实现的?

泛型

  1. 泛型\动态类型

// 1.泛型的定义
function Sum<T>(a:T,b:T):Array<T>{
    return [a,b]
}
Sum(1,2)
Sum("1","88")

// 2. 泛型的扩展

// type
type A<T> = string | number  | T
let a:A<boolean> = true

// interface
interface Data<T>{
    msg:T
}
let data:Data<string>={
    msg:"hahah"
}

// 多个泛型 并且支持默认值
function add<T=number ,K>(a:T,b:K):Array<T | K>{
    return [a,b]
}


  1. 泛型的约束
// 通过extends 约束泛型类型
// 01 
function add <T extends number>(a:T,b:T){
    return a+b
}

// 02
interface Len{
    length:number
}
function fn<T extends Len>(val:T){
    return val.length
}

// 03 对象
let obj={
    name:"666",
    age:16
}
/* keyof */
// JavaScript通过 Object.keys()获取对象的所有属性键值,而typescript主要关注的是类型操作,通过 keyof 操作符可以获取对象中的所有键类型组成的联合类型。
function Ob<T extends object,K extends keyof T>(obj:T,key:K){
    return obj[key]
}

// 04 高级用法
interface Data{
    name:string,
    age:number
    sex:string
}
// for in for(let key in obj)
type Options<T extends object> = {
    [key in typeof T]?:T [key]
}

type B = Options<Data>