收到错误 'unknown' 类型的参数无法分配给 'Error | null' 类型的参数

Getting an error Argument of type 'unknown' is not assignable to parameter of type 'Error | null'

我是 typescript 的新手,所以我收到一条错误消息,提示 'unknown' 类型的参数不可分配给 'Error | null' 类型的参数,我不明白为什么我会得到那个.我该如何解决?

export function subscribeToAccount(
  web3: Web3,
  callback: (error: Error | null, account: string | null) => any
) {
  const id = setInterval(async () => {
    try {
      const accounts = await web3.eth.getAccounts();
      callback(null, accounts[0]);
    } catch (error) {
      callback(error, null);
    }
  }, 1000);

  return () => {
    clearInterval(id);
  };
}

错误是由这一行引起的:

callback(error, null);

来自 catch (error)error 的类型是 unknown,并且您指定 callback 函数接受 Error | null 作为其第一个参数,因此为什么错误。

阅读更多here


简单,但不推荐修复

在您的 tsconfig 文件中将 strict 值设置为 false


另一种简单但更好的方法

明确指定 error 类型为 any

try {
  const accounts = await web3.eth.getAccounts();
  callback(null, accounts[0]);
} catch (error: any) {
  callback(error, null);
}

最佳方式

在 catch 中进行类型检查

try {
  const accounts = await web3.eth.getAccounts();
  callback(null, accounts[0]);
} catch (error) {
  if (error instanceof Error ) {
    callback(error, null);
  } else {
    // handle
  }
}