ts 类型提取问题

如何修改第三行返回的类型,使 result 拥有 age: number
同时现有的返回的类型也还要在

image.png

阅读 3.8k
2 个回答

试试这个是否符合你的需求

// 必须这样写,不能让ts自行推断
let rename: {
    type: 'product_type',
    teacher_name: 'name',
} = {
    type: 'product_type',
    teacher_name: 'name',
};
// 如果使用typescript>=3.4,可以使用const断言,更加简洁
let rename = {
    type: 'product_type',
    teacher_name: 'name',
} as const;


function reobjectKeys<V, T extends { [key: string]: keyof V }>(obj: V, rule: T): Omit<V, T[keyof T]> & { [K in keyof T]: V[T[K]] } {
    // ..
}

const result = reobjectKeys(query, rename);

// 以下应该能正常提示key和type
result.age;
result.type;
result.teacher_name;

直接使用Object.assign就有提示了啊

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进