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

如何为方法参数中使用的函数回调定义类型(作为任何函数类型,而不是通用类型)

花和宜
2023-03-14

目前,我的类型定义为:

interface Param {
    title: string;
    callback: any;
}

我需要这样的东西:

interface Param {
    title: string;
    callback: function;
}

但第二条不被接受。

共有3个答案

赵高韵
2023-03-14

根据Ryan的回答,我认为您正在寻找的接口定义如下:

interface Param {
    title: string;
    callback: () => void;
}
蓟和煦
2023-03-14

从v1开始键入脚本。4具有声明类型别名的type关键字(类似于C/C中的typedef)。您可以这样声明回调类型:

type CallbackFunction = () => void;

它声明了一个不带参数且不返回任何内容的函数。接受任何类型的零个或多个参数且不返回任何内容的函数将是:

type CallbackFunctionVariadic = (...args: any[]) => void;

然后你可以说,比如,

let callback: CallbackFunctionVariadic = function(...args: any[]) {
  // do some stuff
};

如果希望函数接受任意数量的参数并返回任何内容(包括void),请执行以下操作:

type CallbackFunctionVariadicAnyReturn = (...args: any[]) => any;

您可以指定一些强制参数,然后指定一组附加参数(例如字符串、数字和一组附加参数),这样:

type CallbackFunctionSomeVariadic =
  (arg1: string, arg2: number, ...args: any[]) => void;

这对于EventEmitter处理程序之类的事情很有用。

以这种方式,函数可以按您喜欢的强度进行类型化,但如果您试图用类型别名确定所有内容,则可能会得意忘形并遇到组合问题。

凌轶
2023-03-14

全局类型函数用于此目的。

此外,如果您打算用0个参数调用这个回调,并且忽略它的返回值,则类型()=

 类似资料:
  • 当前我的类型定义为: 我需要这样的东西: 但第二个不被接受。

  • 问题内容: ./chains.go:26:10:不能在作业中使用UpperCaseHandler(typefunc(asl.MessageDelivery))作为asl.MessageHandler类型./chains.go:37:86:无法使用RepeatHandler(类型func(asl.MessageDelivery))与Repeater.ConsumeFunc的参数中的asl.Messa

  • 问题内容: 我有一个通用函数,该函数调用Web服务并将JSON响应序列化回一个对象。 我要完成的是等效于此Java代码 我要完成的方法签名正确吗? 更具体地说,将参数类型指定为正确的做法是正确的吗? 调用该方法时,我将其作为returningClass值传递,但是出现编译 错误“无法将表达式的类型’()’转换为’String’类型” CastDAO.invokeService(“test”, wi

  • 问题内容: 我想让一个函数在Swift中接受任何数字(Int,Float,Double,…) 不使用NSNumber 问题答案: 更新: 以下答案原则上仍然适用,但是Swift 4完成了数字协议的重新设计,因此通常不需要添加自己的数字协议。在构建自己的系统之前,请查看标准库的数字协议。 在Swift中,这实际上是不可能的。为此,您需要创建一个新协议,并使用您将在泛型函数中使用的任何方法和运算符进行

  • 问题内容: 当我定义一个自定义类型时,基础类型的类型似乎对我是否可以按原样将其传递给函数还是需要对其进行转换有所不同。 问题是: 为什么和起作用,但不起作用? https://play.golang.org/p/buKNkrg5y- 在这里,当我运行此函数时,它会抱怨,尽管它是基础类型。但是当我打电话或他们成功运行时。 问题答案: 和 您的新类型是2种不同的不同类型。在预期的地方,您必须传递typ

  • 我想使用泛型类作为另一个泛型类的类型参数。 起初,我对类的定义是这样的: 然后我的需求发生了变化,我不得不为我的R类型使用包装器/持有者类 到目前为止,我的尝试:(给出编译时错误: