请教 Typescript 如何给该函数写类型?

请问 getIncludeAttrs 函数的的 type 该怎么写可以得到期望的类型?

let obj = getIncludeAttrs(['name', 'age'], { name: '小明', age: 10, address: "xxx" })
// 期望返回的 obj 类型声明为: {name:string, age:number }
阅读 1.8k
2 个回答
const getIncludeAttrs = <T extends object, K extends keyof T>(item: T, ...keys: K[]) =>
    keys.reduce((result, key) => Object.assign(result, { [key]: item?.[key] }), {} as { [P in K]: T[P] | undefined });

// const x = getIncludeAttrs({ name: 'tom', age: 1, address: '...' }, 'name', 'age');
interface PersonInfo {
  name: string;
  age: number;
  address: string;
} 
function getIncludeAttrs(keys: (keyof PersonInfo)[], personInfo: PersonInfo): {
  [p in keyof PersonInfo]?: PersonInfo[p]
} {
  return { name: '小明', age: 10}
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进