#javascript #typescript #types #promise
#javascript #typescript #типы #обещание
Вопрос:
В TS у меня есть функция, подобная:
function a() : FOO {
return new Promise((resolve, reject) => {
//omitted
})
}
Какой правильный тип для записи FOO
?
Хорошо ли просто сказать Promise<any>
?
Возможно, полезно показать более подробную информацию о том, что я возвращаю в функции a
:
new Promise((resolve, reject) => {
const cmd = spawn(str, null, { shell: true });
cmd.stdout.on("data", (data) => {
//just logging
});
cmd.stderr.on("data", (data) => {
return reject(data);
});
cmd.on("error", (error) => {
return reject(error);
});
cmd.on("close", (code) => {
return resolve(code);
});
});
Комментарии:
1. К чему относится обещание?
2. @evolutionxbox: слезы и разочарование, как и большинство обещаний 😀
3.
Promise<Tears|Disappointment>
? 😉4. @evolutionxbox — Возможно, даже
Promise<Tears amp; Disappointment>
. Я имею в виду, что сейчас 2020 год … 😉
Ответ №1:
Это полностью зависит от того, какого типа будет значение выполнения обещания. Например, если обещание будет выполнено с помощью a number
, тогда тип будет Promise<number>
. Например:
function a() : Promise<number> {
return new Promise((resolve, reject) => {
doSomeCallbackBasedThing((err: Error | null, result: number) => {
if (err) {
reject(err);
} else {
resolve(result);
}
});
})
}
Если он выполняется с undefined
помощью via resolve()
без аргумента, обычно вы пишете Promise<void>
.
Часто вам вообще не нужно явно указывать тип; TypeScript часто может вывести его из кода в функции.
Повторное редактирование: вы бы использовали Promise<x>
where x
— тип code
параметра, который вы получаете в своем обработчике для close
события.