[英]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.