TS中的InstanceType函数和Typeof 操作符

ops/2024/10/20 11:55:48/

InstanceType函数

  • 简介

instancetype函数:该函数返回(构造) 由某个构造函数构造出来的实例类型组成的类型。

  • 常见使用

场景一

vue中的instanceType用法】父组件用ref获取子组件时,通过 instanceType获取子组件的类型

	<!-- 子组件 --><!-- MyModal.vue --><script setup lang="ts">import { ref } from 'vue'const open = () => { console.log('斗帝蓝电霸王龙')}//子组件一定要暴露出去defineExpose({open})</script>
	<!-- 父组件 --><!-- App.vue --><template><MyModal ref='myModal'/></template><script setup lang="ts">import MyModal from './MyModal.vue'//一定要和子组件的ref名称一致,否则获取不到const myModal = ref<InstanceType<typeof MyModal> | null>(null)const openModal = () => {myModal.value?.open()}</script>

场景二

获取由某个构造函数构造出来的实例类型组成的类型。
注意:在TS或JS中,当你执行typeof Person时,如果Person是一个类的定义(如下例所示),typeof Person将会返回function。这是因为类在JavaScript中是基于函数的,类本身是一种特殊的函数对象。尽管ES6引入了更清晰的类语法,但从类型检查的角度看,类仍然被视为函数。

	class Person {name: string;age: number;constructor(name:strig, age:number) {this.name = name;this.age = age;}getPersonInfo() {return `${this.name} ${this.age}`;}}// 类在JavaScript中是基于函数的,类本身是一种特殊的函数对象console.log(typeof Person); // 输出: Functiontypr personInstanceType = InstanceType<typeof Person> // 获取函数构造的实例类型组成的类型let person:personInstanceType = new Person('斗帝蓝电霸王龙', 18);console.log(person); // 输出: Person { name:'斗帝蓝电霸王龙', age: 18 }

Typeof 操作符

  • 简介

在 TypeScript 中,typeof 操作符可以用来获取一个变量或对象的类型。
此外,typeof 操作符除了可以获取对象的结构类型之外,它也可以用来获取函数对象的类型

  • 常见使用

typeof 操作符可以用来获取一个变量或对象的类型。

	interface Person {name: string;age: number;}const sem: Person = { name: '斗帝蓝电霸王龙', age: 18 };type Sem = typeof sem; // type Sem = Person

typeof 操作符也可以对嵌套对象的类型。

	const iblidly = {name: '斗帝蓝电霸王龙',age: 18,address: {province: '河南',city: '商丘'   }}type iblidly= typeof iblidly/*type iblidly= {name: string;age: number;address: {province: string;city: string;};}*/

typeof 操作符除了可以获取对象的结构类型之外,它也可以用来获取函数对象的类型。

	function toArray(x: number): Array<number> {return [x];}type Func = typeof toArray; // -> (x: number) => number[]

http://www.ppmy.cn/ops/45314.html

相关文章

【NumPy】全面解析flatten函数:简化数组变平操作

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

js实现元素根据鼠标滚轮滚动向左右上下滑动着从模糊到清楚显示出来

html代码 <div ref{test} id"animatedElement" className"not-animated"> <div style{{width:"100px",height:"50px",backgroundColor:"red"}}> </div> </div> JS代码 const te…

Java内存空间

Java内存空间划分 Java虚拟机在执行Java程序的过程中会把他管理的内存划分为若干个不同的数据区域&#xff0c;如图所示1.7和1.8两个版本的Java内存空间划分。 JDK1.7: JDK1.8: 线程私有&#xff1a; 程序计数器虚拟机栈本地方法栈 线程共享 &#xff1a; 堆方法区直接内…

[解决]windows mysql8.0.x误删除root,解决办法

1. 停止mysql服务 2. 以管理员身份打开命令窗口&#xff0c;进入到mysql安装位置的bin目录下 3. 输入 mysqld --console --skip-grant-tables --shared-memory 注意&#xff1a;a. 很多解决办法是输入mysqld --skip-grant-tables&#xff0c;这在mysql8.0之后的版本已经不在…

【HarmonyOS尝鲜课】- 下载、安装DevEco Studio以及配置环境、创建运行HarmonyOS项目

下载、安装开发工具 进入DevEco Studio下载官网&#xff0c;单击“立即下载”进入下载页面。 这里以Windows为例进行安装&#xff0c;可以根据操作系统选择对应的版本进行下载。 下载完成后解压一下&#xff0c;进入文件里&#xff0c;双击应用程序&#xff0c;打开安装向导&a…

RFM模型-分析母婴类产品

1&#xff0c;场景描述 假设我们是某电商平台的数据分析师&#xff0c;负责分析母婴产品线的用户数据。母婴产品的购买行为具有一定的周期性和生命周期特征&#xff0c;如用户在不同怀孕阶段的需求不同&#xff0c;以及宝宝出生后的不同成长阶段需要不同的产品。 2&#xff0…

蓝海卓越计费管理系统 agent_setstate.php SQL注入漏洞复现

0x01 产品简介 蓝海卓越计费管理系统是一套以实现网络运营为基础,增强全局安全为中心,提高管理效率为目的的网络安全运营管理系统,提供“高安全、可运营、易管理”的运营管理体验,基于标准的RADIUS协议开发,它不仅支持PPPOE和WEB认证计费,还支持802.1X接入控制技术,与其…

为什么MySQL需要binlog、undo log、redo log 3种日志?

binlog是 server层生成的日记&#xff0c;而 undo log、redo log 是Innodb 存储引擎层生成的日志 binlog&#xff0c;是 binary log的英文缩写&#xff0c;翻译为二进制日志或者归档日志&#xff08;带有业务含义&#xff09;&#xff0c;它是从 MySQL 3.23.14版本引入的。bin…