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