打字稿:T 的对象但值是谓词

Typescript: Object of T but value is Predicate

对于以下函数(另请参阅 http://ramdajs.com/docs/#where

var spec2 = {x: function(val, obj) { return  val + obj.y > 10; }};
R.where(spec2, {x: 2, y: 7}); //=> false
R.where(spec2, {x: 3, y: 8}); //=> true

我想为 object T 具有谓词值的情况创建类型。

我在想我会做这样的事情:

    where<T>(spec: {item: (val: any, testObj: T) => boolean}, testObj: T): boolean;

但我不确定如何处理密钥。

在 TypeScript 类型系统中无法表示这一点。

这似乎更接近于部分类型安全的解决方案:

interface Pred2<T> {
    (x: any, y: T): boolean
}
interface ObjPred2<T> {
    [index: string]: Pred2<T>;
}
where<T>(spec: ObjPred2<T>, testObj: T): boolean;