我正在使用打字稿和nlp.js /
但是参数管理器说“参数管理器暗含任何类型。
我尝试使用:,但效果不佳。
在这种情况下如何输入?感谢您阅读。
module.exports = async function trainnlp(manager) {
await manager.addAnswer('en', 'greetings.arrival', "I've missed you");
manager.save('./model.nlp', true);
}
答案 0 :(得分:4)
如何使用打字稿键入异步功能
async
函数的返回值类型为Promise<X>
,其中X
是将提供的实现值。在您的情况下,由于您的函数在任何地方都没有return
,因此它将是Promise<void>
,因为您的函数所创建的承诺将不会有任何特别的兑现。 (在运行时,实现值将为undefined
,但出于类型目的,它被建模为Promise<void>
。)
TypeScript的最新版本将默认为您返回类型,这就是错误与manager
...
但是参数管理器说'参数管理器暗含任何类型。
这是该代码的真正问题:manager
没有类型。 TypeScript的重点是在编译时提供强类型。如果您不告诉trainnlp
应该是什么类型,它就不能为您的manager
函数做到这一点。您要提供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会推断出该函数的返回类型,因为它发现它是一个async
函数,但从未使用过return
,因此其类型无疑是Promise<void>
。
答案 1 :(得分:-1)
这不是异步函数问题,而是compiler问题。在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);
}