当前位置: 首页 > 知识库问答 >
问题:

Typescript-为非常通用的函数定义接口[重复]

游安康
2023-03-14

我提供了一个函数functionCaller的示例。它需要一种功能,任何一种功能。

const functionCaller = (func: any /* how to define this general func? */) => {
  func();
};

functionCaller((hello: string) => {});
functionCaller(() => {});
functionCaller(() => new Promise((resolve) => {}));

如何定义这样一个函数参数而不使用any

共有3个答案

秦凯定
2023-03-14

我向您推荐以下内容,这将允许您获得返回数据的类型:

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);

游戏场

夹谷信鸿
2023-03-14

使用以下命令:

const functionCaller = (func: Function) => {
  func();
};
濮翰学
2023-03-14

如果这种类型是灵活的,您将始终以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();
}

希望有帮助。

 类似资料:
  • 本文向大家介绍TypeScript 通用接口,包括了TypeScript 通用接口的使用技巧和注意事项,需要的朋友参考一下 示例 声明通用接口 具有多个类型参数的通用接口 实施通用接口 用泛型类实现它: 用非泛型类实现它:            

  • 问题内容: 我想创建一个具有表示其他接口的属性并集的属性的通用接口。 假设我有两个界面 我不想将接口写为 因为这意味着每当我修改接口或时,我也需要手动修改接口。 根据我在TypeScript文档中看到的内容以及此处关于Stack Overflow的答案,我应该声明一个新类型 并实现通用接口形式 我在朝着 但这失败了,因为许多属性与其类型之间不匹配。 我将不胜感激。谢谢。 问题答案: 我认为以下版本

  • 我从我正在使用的库中收到以下接口: 如何创建该类的实现?(我需要一个测试模拟)一个自然的实现,构造函数定义为:

  • 问题内容: 我计划在我的Swift项目中使用Google Drive API 。我正在尝试通过CocoaPods(v0.39.0)添加Drive SDK。以下是我的Podfile。 我添加了标志,以便CocoaPods可以将Objective-C Pod转换为Swift框架,而不是静态库。 吊舱安装成功。但是,当我构建项目时,出现以下错误。 类“ GTMHTTPUploadFetcher”的接口定

  • 函数接口定义为恰好有一个显式声明的抽象方法的任何接口。(限定是必要的,因为接口可能具有非抽象的默认方法。)这就是为什么函数接口过去被称为单一抽象方法(SAM)接口的原因,这个术语现在仍然有时会出现。 那么我们为什么会有这个: 因为中的方法是:

  • 更准确地说,函数接口被定义为恰好具有一个抽象方法的任何接口。 然后,他继续举例,其中一个是接口: 我能够测试我可以使用lambda函数来代替比较器参数,并且它可以工作(即)。 但是在比较器接口中,和方法都是抽象的,这意味着它有两个抽象方法。那么,如果定义要求接口只有一个抽象方法,那么这怎么能起作用呢?我错过了什么?