Typescript 方法参数将方法类型分类为另一个参数类型

Typescript 方法参数将方法类型分类为另一个参数类型,typescript,Typescript,下面是我想做的一个快速示例 // class for acl will be every time some other class for example "UsersACL", etc.... export class EventsACL{ test() : {read: true, write: true} { } } // this one is used as a decorator for other methods function ACL(obj : {

下面是我想做的一个快速示例

// class for acl will be every time some other class for example "UsersACL", etc....
export class EventsACL{
    test() : {read: true, write: true}
    {
    }
}

// this one is used as a decorator for other methods
function ACL(obj : {
    aclClass : any,
    wantedProprties : aclClass.test
});


// call it
ACL({acl : EventsACL, {read: true, write: false});
这意味着,如果我更改EventsACL测试函数,它应该动态更改wantedProperties中的请求值。
请不要使用预定义接口,因为我希望它对每个类都是动态的。

您可以这样做。我们获取
test
返回类型的部分有点粗糙,但该方法不会在运行时调用。您可以在以下位置看到:

var dummy=(假为真)和&EventsACL.prototype.test()
之所以有效,是因为TypeScript类型检查器认为该函数已被计算,但它被转换为仅
var dummy=false&&EventsACL.prototype.test(),因此在运行时不会调用它

export class EventsACL {
  test(): {
    read: boolean,
    write: boolean
  } {
    return {
      read: true, write: false
    }
  }
}

// `aclObj` here can be any typed object with a `test` method. Can be EventsACL or UsersACLinstance
var dummy = (false as true) && aclObj.test();
type ReturnType = typeof dummy;

function ACL(obj: {
  aclClass: any,
  wantedProprties: ReturnType
}) {

}

ACL({
  aclClass: EventsACL,
  wantedProprties: {
    read: true,
    write: false
  }
});

听起来不错,如果我想添加另一个属性作为字符串“两者”,可能吗?哦,这不好,你使用的是预定义的EventsACL,我可以用界面做类似的事情。你说的“预定义的EventsACL”是什么意思?您可以用任何类替换
EventsACL
,用任何方法替换
test
。如果您有一个
EventsACL
实例,那么可以使用
var dummy=(false为true)和&aclClass.test()而不是
var dummy=(假为真)和&EventsACL.prototype.test();因为你认为我一直在使用EventsACL,所以我需要一些动态的东西,但我不确定我是否遵循。你能用一个你想要的例子来更新你的问题吗?