![](/img/trans.png)
[英]How to type async function in TypeScript when its a void function
[英]How to type async function using typescript
我正在使用 typescript 和 nlp.js/
但是参数管理器说'参数管理器隐含地具有任何类型。
我尝试使用:但效果不佳。 在这种情况下我该如何输入? 感谢您阅读。
module.exports = async function trainnlp(manager) {
await manager.addAnswer('en', 'greetings.arrival', "I've missed you");
manager.save('./model.nlp', true);
}
如何使用 typescript 键入异步 function
async
函数的返回值的类型是Promise<X>
,其中X
是将提供的实现值。 在您的情况下,由于您的 function 在任何地方都没有return
,因此它将是Promise<void>
,因为由您的 function 创建的 promise 将没有任何特别之处。 (在运行时,实现值将是undefined
,但出于类型目的,它被建模为Promise<void>
。)
最新版本的 TypeScript 将为您默认返回类型,这就是错误与manager
有关的原因......
但是参数管理器说'参数管理器隐含地具有任何类型。
这是该代码的真正问题: manager
没有类型。 TypeScript 的重点是在编译时提供强类型。 如果你不告诉它应该是什么类型manager
,它就不能为你的trainnlp
function 做到这一点。 您想为manager
提供一个类型:
// (Just an example type)
interface Manager {
addAnswer(a: string, b: string, c: string): Promise<void>;
save(a: string, b: boolean): void;
}
async function trainnlp(manager: Manager) {
// ----------------------------^^^^^^^^^
await manager.addAnswer('en', 'greetings.arrival', "I've missed you");
manager.save('./model.nlp', true);
}
这清除了错误标记的问题。 然后 TypeScript 将推断 function 的返回类型,因为它认为它是async
Promise<void>
,但从不使用它的return
类型。
这不是异步 function 问题,而是编译器问题。 在您的tsconfig.json
中,您将标志noImplicitAny
为true
,您可以将其设置为false
。 但对于这样一个微不足道的案例,这是一个坏主意。
一个更好的方法是指定manager
的类型,如果你真的想要,你甚至可以将其设置为any
类型,但我认为你不需要它。
module.exports = async function trainnlp(manager:any) {
await manager.addAnswer('en', 'greetings.arrival', "I've missed you");
manager.save('./model.nlp', true);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.