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,所以我需要一些动态的东西,但我不确定我是否遵循。你能用一个你想要的例子来更新你的问题吗?