当前位置: 首页 > news >正文

TS的类型守卫、类型约束实践

类型守卫

// 基础类型判断
const arr = [30, 50]
console.log(typeof arr) // object
const set = new Set(arr)
console.log(typeof set) // object
const map = new Map()
console.log(typeof map) // objectclass Customer {constructor() {}buy(method:string) {console.log(method) }
}// 获取具体类型方案一   prototype原型  局限性:自定义类无法判断
console.log('arr:', Object.prototype.toString.call(arr)) // [object Array]
console.log('set:', Object.prototype.toString.call(set)) // [object Set]
console.log('map:', (Object.prototype.toString.call(map))) // [object Map]
console.log('CUstomer:', Object.prototype.toString.call(new Customer())) // [object Object]//获取具体类型方案二: 类型守卫-instanceof in 判断指定类型实例
//获取具体类型方案三: 自定义类型守卫
function isCustomer(val:any): val is Customer {return val instanceof Customer
}
console.log('isCustomer', isCustomer(new Customer()))
console.log('isCustomer', isCustomer('aaaa'))

运行结果:

类型约束

class ObjectRefImpl<T extends object, K extends keyof T> {public readonly __v_isRef = trueconstructor(private readonly _obj:T, private readonly _key: K) {}get value() {return this._obj[this._key]}set value(newVal) {this._obj[this._key] = newVal }
}type ObjType = {username: string; age: number}
type KeysType<K> = K extends keyof ObjType ? K : never
type TestKEeysType = KeysType<'username' | 'age'>
const obj = new ObjectRefImpl<ObjType, 'username'>({username: 'curry', age: 23}, 'username');
console.log(obj.value)

运行结果 

http://www.lryc.cn/news/504384.html

相关文章:

  • 文件转曲,限制PDF文件编辑的最佳方案!
  • MySQL系列之数据授权(安全)
  • 用 Python 实现经典的 2048 游戏:一步步带你打造属于你的小游戏!
  • Vue vs. React:两大前端框架的深度对比与分析(一)
  • React 进阶深入理解核心概念与高阶实践
  • Linux shell的七大功能 ---自动补齐、管道机制、别名
  • XML 在线格式化 - 加菲工具
  • java_多态的应用
  • Python+OpenCV系列:模版匹配
  • 【从零开始入门unity游戏开发之——C#篇10】循环结构——while、do-while、for、foreach的使用
  • Spring Boot项目使用虚拟线程
  • 实现SpringBoot项目嵌入其他项目
  • 朗致面试---IOS/安卓/Java/架构师
  • 数字信号处理:FIR滤波器
  • 鲲鹏麒麟安装Kafka-v1.1.1
  • 群控系统服务端开发模式-应用开发-操作记录功能开发
  • 昇思25天学习打卡营第33天|共赴算力时代
  • Vue 让视图区域滑到指定位置、回到顶部
  • EasyGBS点对点穿透P2P远程访问技术在安防视频监控中的应用
  • Android 使用 Gson + OkHttp 实现 API 的常规使用(个人心得)
  • WPF+MVVM案例实战与特效(三十九)- 深度剖析一个弧形进度条的实现
  • opencv——图片矫正
  • 前端核心知识总结
  • 【C语言】五子棋(c语言实现)
  • 【数据结构——查找】顺序查找(头歌实践教学平台习题)【合集】
  • Python的3D可视化库【vedo】2-1 (plotter模块) 绘制器的使用
  • 6.1 初探MapReduce
  • 【数模学习笔记】模糊综合评价
  • 【C语言】库函数常见的陷阱与缺陷(四):内存内容操作函数[1]--memcmp
  • jmeter CLI Mode 传参实现动态设置用户数