是否可以在TypeScript中定义函数类型并将其参数列表扩展为其他类型(重载函数类型?)?
假设我有这种类型:
type BaseFunc = (a: string) => Promise<string>
我想用一个附加参数(b:数字)和相同的返回值定义另一种类型。
如果将来某个时候BaseType添加或更改参数,这也应该反映在我的重载函数类型中。
这可能吗?
Ger*_*ger 10
您可以使用带有参数<>的扩展:
function base(a: number, b: number, c: number): number
function derived(add: string, ...base: Parameters<typeof base>): number
Run Code Online (Sandbox Code Playgroud)
限制是基本参数必须位于末尾。
UPD:可以在 TypeScript 中扩展函数的参数。见提香的回答。
原始答案:我怀疑是否可以按照您描述的方式完成。但是,您可以尝试以下操作:
interface BaseOptions {
a: string;
}
type BaseFunc = (options: BaseOptions) => Promise<string>
interface DerivedOptions implements BaseOptions {
b: number;
}
type DerivedFunc = (options: DerivedOptions) => Promise<string>
Run Code Online (Sandbox Code Playgroud)
这种方法的另一个优点是您可以免费命名参数。因此,从调用方来看,它会比仅仅调用BaseFunc或DerivedFunc使用位置参数更清晰。比较一下:
someFuncA(1, undefined, true);
// vs
someFuncB({nofiles: 1, enableLogging: true}); // and bar: undefined is just omitted
Run Code Online (Sandbox Code Playgroud)
您可以在休息参数中使用元组,并将表达式与条件类型和条件类型的推断行为一起使用,以从签名中提取参数并重建新签名。
type BaseFunc = (a: string) => Promise<string>
type BaseWithB = BaseFunc extends (...a: infer U) => infer R ? (b: number, ...a:U) => R: never;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
307 次 |
| 最近记录: |