Typescript定义数组,让数组的所有Item只能是指定对象的key值

描述

Typescript定义一个数组,该数组的所有Item只能是指定对象的key值。

示例

	const targetObj = {
		a: "",
		b: "",
		c: ""
	}
	
	// ok
	const arr = ["a", "b"]
	
	// error
	const arr = ["a", "d"]

解决

	const arr: (keyof targetObj)[] = ["a", "b"]

思考

  • 如何定义一个对象类型,该对象类型限定的对象,其所有key值由一个元祖指定。
const arr = ["a", "b"];

const obj: ObjType<typeof arr> = {
	a: "fo",
	b: "foo"
}
  • 解决:
  1. typeof 获取arr的类型,得到readonly [“a”, “b”],鼠标移到定义的arr上边会提示其类型。
  2. 让泛型T继承reayonly any[],保证泛型T能与typeof取得的类型一致。
  3. 通过T[number]索引可以获取的每一项,[K in T[number]]即可枚举每一项作为对象的key。
type ObjType<T extends reayonly any[]> = {
	[K in T[number]]: any;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值