Попробуйте это:
function setTimeoutPromise(fn: () => number, delay: number): Promise<number> {
return new Promise( (resolve, reject) => {
setTimeout(() => {
resolve(fn())
}, delay)
})
}
setTimeoutPromise(() => {
console.log('resolving...');
return 10;
}, 5000).then((res) => console.log('should print 10 after 5 secs', res));
это прекрасно компилируется с tsc --strict true
. Я не уверен, если это то, что вы ищете, хотя. Дайте мне знать!
Есть еще один способ достижения этого, о котором я только что подумал:
import * as util from 'util';
const setTimeoutPromise = util.promisify((delay, fn) => setTimeout(fn, delay));
setTimeoutPromise(5000).then(() => console.log('hey you!'));
Это может выглядеть немного странно, но это работает. В основном .promisify
ожидает, что стандартная функция callback-last будет передана ему в качестве аргумента, тогда как setTimeout
имеет противоположную сигнатуру. Поэтому мы обращаем их вспять:)