在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);
});
});
答案 0 :(得分:1)
这完全取决于承诺的实现值是哪种类型。例如,如果诺言将用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
通过resolve()
不带任何参数来实现它,通常您会写成Promise<void>
。
通常,您根本不必显式地编写类型; TypeScript通常可以从函数中的代码推断出来。
进行编辑:您将使用Promise<x>
,其中x
是在code
事件的处理程序中收到的close
参数的类型。