描述
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"
}
- 解决:
- typeof 获取arr的类型,得到readonly [“a”, “b”],鼠标移到定义的arr上边会提示其类型。
- 让泛型T继承reayonly any[],保证泛型T能与typeof取得的类型一致。
- 通过T[number]索引可以获取的每一项,[K in T[number]]即可枚举每一项作为对象的key。
type ObjType<T extends reayonly any[]> = {
[K in T[number]]: any;
}