您的位置:首页 > 文旅 > 美景 > TS中的InstanceType函数和Typeof 操作符

TS中的InstanceType函数和Typeof 操作符

2024/10/5 23:23:43 来源:https://blog.csdn.net/qq_52603369/article/details/139147049  浏览:    关键词:TS中的InstanceType函数和Typeof 操作符

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[]

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com