Я знаю, что система типов Typescript позволяет делать довольно сложные выводы, и мне интересно, как далеко я могу толкать дротик.
Я хочу создать простую служебную функцию, которая откладывает Future путем каррирования.
Future<T> Function(Future<T> fut) delay<T>(Duration dur) =>
(fut) async => (await Future.wait(
[Future.delayed(dur), fut],
))[1] as T;
Проблема в том, что я должен передать T функции задержки, например:
final delayedPosition<Position>(Duration(seconds: 3));
// later
await delayedPosition(someFutureThatReturnsAPosition);
В идеале я бы хотел, чтобы Дарт сделал вывод о типе, который возвращается в будущем, чтобы мне не приходилось указывать его самому.
Это возможно? Если да, то как это будет выглядеть?
РЕДАКТИРОВАТЬ:
Чтобы было ясно, я хочу не делать delay
универсальным, а тип возвращаемого значения функции, возвращаемой из delay
, выводится из его аргумента. Кажется, это вызывает путаницу.
e.g.
// declare delay - I don't know what it should look like
final thingThatDelaysAFutureBy3Seconds = delay(Duration(seconds: 3));
// later
final valFromFuture = await thingThatDelaysAFutureBy3Seconds(someFuture);