Аргумент типа "ожидаемый T" не может быть назначен параметру типа "T" - PullRequest
2 голосов
/ 05 мая 2020

Я получил это сообщение об ошибке и не знаю, что мне делать (Как объяснено в EDIT ниже, я использую TS version 3.9.0-dev.20200324) ...

ошибка (TS2345): аргумент типа «ожидаемый T» не может быть назначен параметру типа «T». 'T' может быть создан с произвольным типом, который может не иметь отношения к 'awaited 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:

Неверный вывод типа возврата в обобщенной функции c с использованием Promise.all

EDIT

Из-за различных других проблем в моем код при использовании другой версии TS Я застрял, используя Version 3.9.0-dev.20200324.

Это при использовании Version 4.0.0-dev.20200504 другие части кода здесь не показаны, проблема подробно описана в этом выпуске GitHub .

Many more problems using current version

Игровая площадка 3.9.0-dev.20200324

Игровая площадка Ночь

Детская площадка 3.8.3

1 Ответ

1 голос
/ 05 мая 2020

Преобразование 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)
  );
}

Ужасный обходной путь, но что вы можете сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...