提问者:小点点

返回类型不可赋值


第三方软件包的功能如下所示。。。

function asKey(key: KeyObject | KeyInput, parameters?: KeyParameters): RSAKey | ECKey | OKPKey | OctKey;

所有返回类型(RSAKEYECKEYOKPKEYOCTKEY)都是扩展Key的接口。

我正在使用askey函数并尝试设置rsakey的返回类型,因为我知道它只返回此1接口。。。

private foo = (): RSAKey => {
    return asKey('foo');
};

但是,在以下情况下失败:

Type 'RSAKey | ECKey | OKPKey | OctKey' is not assignable to type 'RSAKey'.
  Type 'ECKey' is not assignable to type 'RSAKey'.
    Types of property 'kty' are incompatible.
      Type '"EC"' is not assignable to type '"RSA"'.ts(2322)

如果我在foo函数中将返回类型更改为key,我不会收到任何错误,但这不是我想要的,因为RSAKey有一个额外的函数,我想调用它,但它不在key中。 我怎样才能最好地使这个返回类型工作?


共1个答案

匿名用户

当您编写以下代码时

private foo = (): RSAKey => {
    return asKey('foo');
};

Typescript正在查看askey,发现可能有多个不同的类型可以返回,而foo无法处理它们,这就是为什么会出现错误的原因。

如果您知道askey将只返回rsakey类型,则必须告诉Typescript:

没事,我知道怎么回事。 相信我,类型是RSAKey

您可以使用关键字作为执行此操作

private foo = (): RSAKey => {
    return asKey('foo') as RSAKey;
};