簡體   English   中英

如何在打字稿中注釋生成器函數

[英]How to annotate generator functions in typescript

讓我們看看promisejs.org中的示例async函數,它允許我們使用生成器等待promises:

function async(makeGenerator){
  return function () {
    var generator = makeGenerator.apply(this, arguments);

    function handle(result){
      // result => { done: [Boolean], value: [Object] }
      if (result.done) return Promise.resolve(result.value);

      return Promise.resolve(result.value).then(function (res){
        return handle(generator.next(res));
      }, function (err){
        return handle(generator.throw(err));
      });
    }

    try {
      return handle(generator.next());
    } catch (ex) {
      return Promise.reject(ex);
    }
  }
}

用法示例:

var login = async(function* (username, password, session) {
  var user = yield getUser(username);
  var hash = yield crypto.hashAsync(password + user.salt);
  if (user.hash !== hash) {
    throw new Error('Incorrect password');
  }
  session.setUser(user);
});

我的問題:如何在TypeScript中注釋這兩個函數,以保持類型安全?

我試過的:我知道async函數返回一個Promise<T> ,但我不確定T應該是什么。 我想這應該取決於傳入的發電機,但發電機有什么類型? nodejs或bluebird的輸入中有GeneratorFunction (不記得哪個),但那個不是通用的,所以我不能做async(makeGenerator: GeneratorFunction<T>): Promise<T>因為我想要。

但我不確定T應該是什么

在您的情況下, login不向Promise<void>返回任何內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM