Home > Software design >  Getting an error Argument of type 'unknown' is not assignable to parameter of type 'E
Getting an error Argument of type 'unknown' is not assignable to parameter of type 'E

Time:09-25

I am fairly new to typescript so I am getting an error which say Argument of type 'unknown' is not assignable to parameter of type 'Error | null' and i can't understand why am i getting that. How do I solve this?

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);
  };
}

CodePudding user response:

The error is caused by this line:

callback(error, null);

The type of error from catch (error) is unknown, and you specified that callback function accepts Error | null as its first parameter, hence why the error.

Read more here


Easy, but not recommended fix

Set strict value to false on your tsconfig file


Another easy, but better way

Explicitly specify the error type to any

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

Best way

Do a type checking inside the catch

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