【问题标题】:Typescript typing property getter creator打字稿打字属性吸气剂创建者
【发布时间】:2021-07-19 14:34:19
【问题描述】:

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

我有一个函数,它接受Type 的对象并为该对象返回一个“getter”函数。 Here's 一个简单的游乐场。

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


    【解决方案1】:

    问题是您的泛型将在创建 makeGetter 函数时创建。此时Key尚未解析为特定密钥。将泛型移至柯里化函数。

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

    Playground

    【讨论】:

    • 我又插手了一段时间,也得出了同样的结论。这种方式确实有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 2019-02-25
    • 2017-01-26
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多