gpt4 book ai didi

javascript - 返回检索成员变量的函数的函数

转载 作者:行者123 更新时间:2023-11-30 20:09:27 24 4
gpt4 key购买 nike

考虑:

const compose = <S, T, R>(func1: (inp2: T) => R, func2: (inp: S) => T): (inp: S) => R => ((arg: S) => func1(func2(arg)));
const not = (val: boolean): boolean => !val;
const equals = <T>(val1: T): (val2: T) => boolean => ((val2: T): boolean => (val1 == val2));

和类

class MyClass {
constructor(public readonly name: string) { }
}

以下是在列表 myarray 中搜索名称为 "find me"MyClass 的两种方法:

(1) 搜索使用

myarray.filter(compose(equals("find me"), (c: MyClass): string => c.name));

(2) 添加public getName(): string {return this.name; 到类定义,并使用

搜索
myarray.filter(compose(equals("find me"), MyClass.prototype.getName.bind));

问题:这两个选项都很冗长。是否可以定义一个接受类和成员变量并返回该成员变量的“getter”的仿函数?

最佳答案

我们可以使用 keyof 以类型安全的方式构建这样的函数:

const get = <T, K extends keyof T>(cls: new (...a: any[]) => T, key: K) => (c: T) => c[key];
var found = myarray.some(compose(equals("find me"), get(MyClass, 'name')));

进一步的简化是创建一个类专用的 getter 构建器函数。这可以作为静态成员或单独的变量保留在类中,具体取决于您希望如何在代码中拆分关注点:

const getBuilder = <T>(cls: new (...a: any[]) => T) => <K extends keyof T>(key: K) => (c: T) => c[key];
class MyClass {
constructor(public readonly name: string) { }
static get = getBuilder(MyClass); // getter builder on class
}
let myarray: MyClass[] = []
const myClassGet = getBuilder(MyClass);// class dedicated builder
var found = myarray.some(compose(equals("find me"), myClassGet('name')));
var found2 = myarray.some(compose(equals("find me"), MyClass.get('name')));

关于javascript - 返回检索成员变量的函数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52551381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com