无法将类型“ awaited T”的参数分配给类型“ T”的参数

时间:2020-05-04 22:01:13

标签: typescript generics asynchronous types async-await

我收到此错误消息,不知道该怎么办(如下面的 EDIT 所述,我正在使用TS version 3.9.0-dev.20200324

错误(TS2345):类型“ awaited T”的参数不能分配给类型“ T”的参数。 可以使用与“等待的T”无关的任意类型实例化“ T”。

Screen capture of the problem -- Code as text below -- Pop N' Lock Theme by Luxcium ✨

TypeScript代码:lib/functional/promise-or-not.ts


// ... [more code]

export async function thenified<T>(
  promise: Promise<T>,
  funct: <R>(t: T) => R,
): Promise<any> {
  return promise.then(
    t => funct(t)
  );
}

输出:tsc Version 3.9.0-dev.20200324

% ❯  tsc # 3.9.0-dev.20200324 
lib/functional/promise-or-not.ts:10:16 - error TS2345: Argument of type 'awaited T' is not assignable to parameter of type 'T'.
  'T' could be instantiated with an arbitrary type which could be unrelated to 'awaited T'.

10     t => funct(t)
                  ~
Found 1 error.

另请参见Microsoft / TypeScript /#37664中的this comment

使用Promise.all在通用函数中错误的返回类型推断

编辑

由于使用其他TS版本时我的代码中存在其他问题,因此我无法使用Version 3.9.0-dev.20200324

这是在使用Version 4.0.0-dev.20200504时未在此处显示其他代码部分的情况,问题在this GitHub issue中进行了详细说明。

Many more problems using current version

Playground 3.9.0-dev.20200324

Playground Nightly

Playground 3.8.3

1 个答案:

答案 0 :(得分:2)

t投射到any

export async function thenified<T>(
  promise: Promise<T>,
  funct: <R>(t: T) => R,
): Promise<any> {
  return promise.then(
    t => funct(t as any)
  );
}

糟糕的解决方法,但是您该怎么办。