我有一个从对象获取属性的函数。
// Utils.ts
export function getProperty<T, K extends keyof T>(obj: T, key: string): T[K] {
if (key in obj) { return obj[key as K]; }
throw new Error(`Invalid object member "${key}"`);
}
我想检查返回的属性是否是具有给定签名的函数,然后使用提供的参数调用该属性。
getProperty()
用于动态获取对象的方法之一并调用它。我试过了:
let property: this[keyof this] = utils.getProperty(this, name);
if (typeof property === 'function') ) { property(conf); }
但这给出了“无法调用类型缺少调用签名的表达式。类型'any'没有兼容的调用签名。” 错误。我知道来自的属性getProperty()
确实可以是任何类型,但是如何确定它是带有(conf: {}): void
签名的函数?