typescript 属性x不存在'void'类型|值'

tktrz96b  于 2022-11-18  发布在  TypeScript
关注(0)|答案(1)|浏览(156)

我有一个函数,它有时会返回:
承诺< Value >(如果是无错误)、
如果< void >存在错误,请承诺。

async function myFunction(
  a: A
  b: B
) {
  try {
    const variable = await getSomething(a,b);
    return getValue(variable);
  } catch(e) {
    return throwError(e);
  }
}

我的trowError函数如下所示:

export default function throwError(error: Error | any) {
    if (error instanceof Error) {
        throw error;
    }
    throw new Error(String(error));
}

我做了type MyType = Promise<Value | void>;
并将上面一行作为myFunction的返回类型,它不会在那里触发错误。
但如果我试图在另一个函数中使用该函数的一些值,我将面临错误:

属性val 1不存在'void'类型|值'

async function anotherFunction() {
  // do some stuff
  const { val1 } = await myFunction(x, y);
  // do rest stuff
}

请您给予一些帮助或建议!!!

ncecgwcz

ncecgwcz1#

throwError函数返回never

export default function throwError(error: Error | any) {
    if (error instanceof Error) {
        throw error;
    }
    throw new Error(String(error));
}

这意味着myFunction实际上返回Promise<Value | never>,但由于never是 * 空联合类型 *,因此它被简化为Promise<Value>

async function myFunction(
  a: A
  b: B
): Promise<Value> {
  try {
    const variable = await getSomething(a,b);
    return getValue(variable);
  } catch(e) {
    return throwError(e);
  }
}

另外,我认为这里不需要显式的类型注解。TypeScript应该能够推断出这个函数的返回类型。

相关问题