我有一个带有两个参数的私有函数:
export interface XhrHelperFunction extends Function {
(cb ?: Function, lock ?: boolean) : any;
}
...我有一个公共函数接口,允许用户调用该私有函数:
export interface Actionable {
run(cb : Function, lock?: boolean) : void;
}
此格式的问题是每次更新XhrHelperFunction
的界面时,我都必须相应地更新Actionable
界面的格式。因此,我更愿意以类似于Actionable
run(/* Parameters of XhrHelperFunction */) : void;
我尝试过以下格式:
export interface Actionable {
run(XhrHelperFunction) : void;
}
这在类中编写run
方法签名时有效,但在将参数传递给类实例时不起作用,即。 actionable.run(cb, lock)
因为显然参数不符合function run(XhrHelperFunction) : void
的签名。我也无法将它们括在括号中并将它们转换为XhrHelperFunction
。
你有什么建议?
答案 0 :(得分:2)
您可以引入参数类型,例如
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
接口的使用者隔离,那么无论如何都不能公开相同的参数类型,您应该保留代码。