方法参数类方法类型作为另一个参数类型

时间:2017-04-22 13:16:40

标签: 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 : {
    aclClass : any,
    wantedProprties : aclClass.test
});


// call it
ACL({acl : EventsACL, {read: true, write: false});

这意味着如果我更改了EventsACL测试函数,它应该动态更改wantedProperties中的请求值。 请不要使用预定义的界面,因为我希望它对每个班级都是动态的。

1 个答案:

答案 0 :(得分:0)

你可以这样做。我们得到返回类型var dummy = (false as true) && EventsACL.prototype.test();的部分稍微有点hackish但是在运行时不会调用该方法。你可以在TypeScript playground

看到它

var dummy = false && EventsACL.prototype.test();有效,因为TypeScript类型检查器认为函数已经过计算,但它在JavaScript中仅被转换为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 } }); ,因此不会在运行时调用它。

windowClosing(...)