获取错误“未知”类型的参数不能分配给“错误”类型的参数 |空值'

Posted

技术标签:

【中文标题】获取错误“未知”类型的参数不能分配给“错误”类型的参数 |空值\'【英文标题】:Getting an error Argument of type 'unknown' is not assignable to parameter of type 'Error | null'获取错误“未知”类型的参数不能分配给“错误”类型的参数 |空值' 【发布时间】:2021-11-17 20:46:25 【问题描述】:

我对打字稿相当陌生,所以我收到一个错误,说“未知”类型的参数不能分配给“错误”类型的参数 | 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);
  ;


【问题讨论】:

【参考方案1】:

错误是由这一行引起的:

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
  

【讨论】:

以上是关于获取错误“未知”类型的参数不能分配给“错误”类型的参数 |空值'的主要内容,如果未能解决你的问题,请参考以下文章

错误:参数类型“上下文”不能分配给参数类型“BuildContext”

Flutter - 错误:参数类型'String/*1*/'不能分配给参数类型'String/*2*/'

错误:参数类型 'void Function()?'不能分配给参数类型 'void Function(String?)?'

错误:参数类型“字符串?”不能分配给参数类型“字符串”

错误:不能将参数类型“String”分配给参数类型“Uri”。使用JsonPlaceHolder

错误:参数类型“对象?”不能分配给参数类型“字符串”