有没有一种方法可以使用键名和值类型在Typescript中编写吸气剂工厂?

时间:2020-11-07 22:06:16

标签: typescript typescript-generics

背景:尝试在Typescript中编写一些类型友好的FP。具体来说,我正在尝试编写一种getter工厂函数,以返回一个类型安全的getter,该类型安全的getter通过一个键读取值,该键来自具有该键值类型的任何类型。 如果我立即定义类型,它将起作用:

export const fnGetter = <T extends object, K extends keyof T>(key: K) => (obj: T) => obj?.[key];
export const getTitleString = fnGetter<{title?: string}, 'title'>('title');
// console.log(getTitleString({title: 123})); // compile error, good
console.log(getTitleString({title: 'Hello'})); // => 'Hello'

但是它很冗长,我想知道以下内容:

export const getTitleString = fnKeyGetter<string>('title');
// console.log(getTitleString({title: 123})); // compile error, good
console.log(getTitleString({title: 'Hello'})); // => 'Hello'

fnKeyGetter函数应如何起作用?是否可以从键和值类型构建泛型类型?

1 个答案:

答案 0 :(得分:0)

这似乎对我有用,并且可以正确推断类型:

function getPropertyFactorry<O>(key: keyof O) {
    return function(o: O) {
        return o[key];
    }
}

尽管我不认为这是您正在寻找的解决方案。