目标
我有一个私有函数,它包含两个参数:
export interface XhrHelperFunction extends Function {
(cb ?: Function, lock ?: boolean) : any;
}..。我有一个公共函数的接口,它允许用户调用这个私有函数:
export interface Actionable {
run(cb : Function, lock?: boolean) : void;
}这种格式的问题是,每次更新XhrHelperFunction接口时,都必须相应地更新Actionable接口的格式。因此,我更倾向于以类似于:run(/* Parameters of XhrHelperFunction */) : void;的方式重写run(/* Parameters of XhrHelperFunction */) : void;
尝试
我尝试了以下格式:
export interface Actionable {
run(XhrHelperFunction) : void;
}这在类内写入run方法签名时有效,但在将参数传递到类实例(即。actionable.run(cb, lock),因为显然参数不符合function run(XhrHelperFunction) : void的签名。我也不能将它们封装在括号中并将它们转换为XhrHelperFunction。
你有什么建议?
发布于 2017-03-21 15:31:26
你可以引入一个参数类型。
interface IArguments {
cb? : Function;
lock? : boolean;
}并使您的接口依赖于这种类型:
export interface XhrHelperFunction extends Function {
(args : IArguments) : any;
}
export interface Actionable {
run(arguments : IArguments) : void;
}我想知道,当您将一个非常薄的包装公开为公共API时,为什么不首先公开helper函数。这将降低此接口的复杂性。注意,如果您发布了公共接口,更改函数的参数会变得越来越烦人,因为您需要根据Actionable接口更改所有位置。
如果您希望将XhrHelperFunction的更改与您的Actionable接口的使用者隔离开来,那么无论如何您都不能公开相同的参数类型,因此您应该保留代码。
https://stackoverflow.com/questions/42927500
复制相似问题