Typescript - 为非常通用的功能定义接口[重复]
Posted
技术标签:
【中文标题】Typescript - 为非常通用的功能定义接口[重复]【英文标题】:Typescript - Define interface for a very general function [duplicate] 【发布时间】:2020-09-24 17:29:03 【问题描述】:我提供了函数functionCaller
的示例。它需要一个函数,任何类型的函数。
const functionCaller = (func: any /* how to define this general func? */) =>
func();
;
functionCaller((hello: string) => );
functionCaller(() => );
functionCaller(() => new Promise((resolve) => ));
如何在不使用any
的情况下定义这样的函数参数?
【问题讨论】:
【参考方案1】:我向您推荐以下内容,这将允许您拥有返回数据的类型:
function functionCaller<T extends (...args: any[]) => any>(func: T): ReturnType<T>
return func();
const funcA = (hello: string) => ;
const funcB = () => ;
const funcC = () => new Promise((resolve) => )
const typeA = functionCaller<typeof funcA>(funcA);
const typeB = functionCaller<typeof funcB>(funcB);
const typeC = functionCaller<typeof funcC>(funcC);
playground
【讨论】:
【参考方案2】:如果这种类型非常灵活,您将始终以any
结尾。
但是,函数类型会是这样的
type AnyFunction = (...args: any[]) => any;
const functionCaller = (func: AnyFunction) =>
func();
或者,您可以通过使用泛型类型来更精确。
type Args = any[] | never;
type AnyFunction<TArgs extends Args, TResult> = (...args: TArgs) => TResult;
const functionCaller = <TResult>(func: AnyFunction<any[], TResult>) =>
func();
希望对你有帮助。
【讨论】:
【参考方案3】:使用这个:
const functionCaller = (func: Function) =>
func();
;
【讨论】:
【参考方案4】:你可以这样定义:
const functionCaller = (func: () => any) =>
func();
;
希望这会有所帮助。
【讨论】:
以上是关于Typescript - 为非常通用的功能定义接口[重复]的主要内容,如果未能解决你的问题,请参考以下文章