React/Typescript 向函数添加承诺时出错?

React/Typescript error when adding promise to a function?

我正在使用 useWagmi 的以下函数将交易写入以太坊合约:https://wagmi.sh/docs/hooks/useContractWrite

const [{ data, error, loading }, write] = useContractWrite(
    {
      addressOrName: 'Address',
      contractInterface: Interface,
    },
    'publicSaleMint',
    {
      args: [thirdHashRef.current],
    }
  ) 

效果很好。但是,我想 return 发送交易后的交易响应 - 我按照文档并在交易结束时添加了一个承诺:

const [{ data, error, loading }, write] = useContractWrite(
    {
      addressOrName: 'Address',
      contractInterface: Interface,
    },
    'publicSaleMint',
    {
      args: [hashRef.current],
    }
  )=> Promise<{ data?: TransactionResponse, error?: Error }> **Added this**

我在这里调用函数:

async function handleSubmit() {
    await cleanEntries()
      .then(() => { write() })
      .then((data) => { console.log(data.TransactionResponse) })
  }

但是,现在我收到以下错误:

Operator '<' cannot be applied to types 'PromiseConstructor' and '{ data: any; error: ErrorConstructor; }'.ts(2365)

Operator '>' cannot be applied to types 'boolean' and '() => Promise<void>'.ts(2365)

我该如何解决这个问题?

您提到的文档是这样说的:

Return Values

write

(
  config: {
    args: any | any[]
    overrides?: Overrides
  } = {},
) => Promise<{ data?: TransactionResponse; error?: Error }>

该文档并没有告诉您编写该代码,它只是向您展示了 return 值的参数和类型。这是函数声明的片段,其中 => 之后的部分是函数的 return 类型。这是库作者自己写的,不用加

因此 useContractWrite 编写的 write 函数 return 已经 return 是一个承诺,您所要做的就是使用它。您不需要添加任何特殊语法。

const [{ data, error, loading }, write] = useContractWrite(/* ... */)
write().then(() => console.log('promise resolved'))

Playground