首页 > 解决方案 > 打字稿打字属性吸气剂创建者

问题描述

我的问题类似于此处此处(可能还有其他地方)描述的问题。我觉得这是一个简单的查找类型问题(在此处记录)。但我的用例略有不同,我无法让它工作。

我有一个函数,它接受一个对象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');

但是,选定的属性始终是所有可能的属性类型的联合。

我错过了什么?

标签: typescript

解决方案


问题是您的泛型将在创建 makeGetter 函数时创建。此时Key尚未解析为特定键。将泛型移动到 curried 函数。

const makeGetter = <Type extends Object>(obj: Type) => <K extends keyof Type>(key: K) => obj[key]

操场


推荐阅读