generator - Jak mohu zajistit, aby TypeScript automaticky odvodil typ výsledku volání `yield`?
V následujícím ukázkovém kódu:
function* gen() {
let v = yield Promise.resolve(0);
return v;
}
Typ v je odvozen jako any. Zajímá mě, zda existuje způsob, jak nechat odvodit jiný typ (například number) na základě kontextových nápověd.
Vím, že v tomto konkrétním scénáři mohu místo toho použít async/await, ale zajímá mě obecný případ (když nepracujeme s přísliby).
Odpověď č. 1
Bohužel, Typescript toto momentálně nepodporuje. A zdá se, že neexistuje dobré řešení jinak než jednoduše přidat typovou anotaci u každého výrazu yield:
function* gen() {
let v: number = yield Promise.resolve(0);
return v;
}
Je to složitý problém k vyřešení, protože hodnota vrácená příkazy yield závisí zcela na semantice toho, co generátor spotřebovává. Vím, že yield Promise.resolve(0) nakonec vrátí číslo jen proto, že znám semantiku coroutine, ale v skutečně může být cokoliv.
Ale doufejme, že Typescript přidá podporu pro deklarování těchto vztahů jako součást typu samotného generátoru. Tady je relevantní problém na GitHubu.
