在打字稿中将函数作为参数传递:预期为 0 个参数,但得到 1.ts

Jon*_*Tan 9 javascript typescript

我试图将此doSomething函数传入performAction,但我得到的错误是Expected 0 arguments, but got 1

type someType = {
  name: string,
  id: string
}

function doSomethingFn(props: someType) {
  console.log(props.name + " " + props.id);
}

function performAction(doSomething: () => void) {
  doSomething({
    name: "foo",
    id: "bar"
  });
}

performAction(doSomethingFn);
Run Code Online (Sandbox Code Playgroud)

我是否为 Typescript 使用了正确的语法?

Dev*_*h J 12

doSomething类型似乎不正确。在类型声明中——() => void它不带参数,但稍后你将参数传递给它。

对于这段代码,下面的代码是可行的,但您会更好地了解doSomething. 如果您已经有了一个抽象,可能会使用接口。

function performAction(doSomething: (stuff: { name: string, id: string }) => void) {
  doSomething({
    name: "foo",
    id: "bar"
  });
}
Run Code Online (Sandbox Code Playgroud)

上面的演示

此外,如果string在您的代码中是一个变量,您需要更改它,因为它string是为该类型保留的。如果您现在不知道要修复什么类型,则doSomething可以使用该Function类型。演示


更新

对于您更新的问题,您需要编写function performAction(doSomething: (stuff: someType) => void Demo