Skip to content

keyof 及 in

keyof:能够用于取 interface 的键后保存为联合类型

interface IUser {
  name: string
  age: number
}
// 使用type获取
type keyofUser = keyof Iuser;

// keyofUser = "name" | "age"

update "State" with k & v

ts
const updateDto = useMemoizedFn((k: keyof IProps, v: IProps[keyof IProps]) => {
  setDto((prev) => ({
    ...prev,
    [k]: v,
  }));
});

in : 取联合类型的值,主要用于数组和对象的构建

type keyofUser = "name" | "age";
type TUser = {
	[key in keyofUser]: string
}

// Tuser = {
  name: string
  age: string
}

interface Todo {
  title: string
  description: string
  completed: boolean
}

const getValue = (obj: Todo, key: string) {
	return obj[key];
}

// 上面对比下面,上面无法对key进行约束,会导致输入错误获取不到的情况
// 避免这种情况可以使用keyof来处理类型,如下

const getValue = <T extends Todo, K extends keyof T>(obj: T, key: K ): T[K] => {
  return obj[key];
}

基于 MIT 许可发布