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); // 输出: Function
	
	typr 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[]
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值