typescript - 打字稿打字属性吸气剂创建者
问题描述
我的问题类似于此处和此处(可能还有其他地方)描述的问题。我觉得这是一个简单的查找类型问题(在此处记录)。但我的用例略有不同,我无法让它工作。
我有一个函数,它接受一个对象Type
并为这个对象返回一个“getter”函数。
这是一个简单的游乐场。
type User = {
name: string,
age: number,
};
const makeGetter = <Type, Key extends keyof Type>(obj: Type) => (key: Key) => obj[key];
const user: User = {
age: 55,
name: 'Brian',
};
const getter = makeGetter(user);
const u = getter('age');
但是,选定的属性始终是所有可能的属性类型的联合。
我错过了什么?
解决方案
问题是您的泛型将在创建 makeGetter 函数时创建。此时Key
尚未解析为特定键。将泛型移动到 curried 函数。
const makeGetter = <Type extends Object>(obj: Type) => <K extends keyof Type>(key: K) => obj[key]
推荐阅读
- vue.js - 如何禁用 Vue 上的按钮?
- html - 如何将悬停的重置延迟到过渡完成后?
- python - Elasticsearch - cross_fields 嵌套字段
- sql - 如何将 BigQuery SQL 结果中的列类型从 NULLABLE 转换为 REQUIRED?
- python - 如何在 django 内联管理中禁用内联标签?
- web-scraping - Cheeriojs 除了 document.getElementsByClassName 什么都不返回
- javascript - 添加“返回”按钮以羽毛笔气泡输入(例如链接)
- python - 我正在尝试制作一个乘法表,但是如何并排打印输出?
- javascript - 根据条件重试失败的http req,并指定应该重试的尝试次数 - Angular
- css - 使用类和 id 的 Webpack CSS 不起作用