当我在tsconfig.json
中启用noImplicitThis
时,我收到以下代码的错误:
'this' implicitly has type 'any' because it does not have a type annotation.
class Foo implements EventEmitter {
on(name: string, fn: Function) { }
emit(name: string) { }
}
const foo = new Foo();
foo.on('error', function(err: any) {
console.log(err);
this.emit('end'); // error: `this` implicitly has type `any`
});
向回调参数添加类型化的this
会导致相同的错误:
foo.on('error', (this: Foo, err: any) => { // error: `this` implicitly has type `any`
解决方法是将this
替换为对象:
foo.on('error', (err: any) => {
console.log(err);
foo.emit('end');
});
但是,如何正确地修复此错误呢?
- UPDATE:**事实证明,在回调函数中添加一个类型化的
this
确实解决了这个错误。我之所以看到这个错误,是因为我使用了一个带有this
类型注解的arrow函数:
- UPDATE:**事实证明,在回调函数中添加一个类型化的
5条答案
按热度按时间sxissh061#
通过插入
this
并将类型注解作为第一个回调参数,这个错误确实得到了修复。我尝试这样做的同时将回调改为一个arrow-function,结果失败了:应该是这样的:
或者这个:
创建了一个GitHub issue来改进编译器的错误消息,并使用
this
和arrow-function突出显示实际的语法错误。bzzcjhmw2#
对于配置为
"noImplicitAny": true,
的方法装饰器声明,您可以根据@tony19的答案显式指定此变量的类型oknwwptz3#
在tsconfig.json中将“noImplicitAny”更改为false没有帮助。请尝试在tsconfig.json中执行
"noImplicitThis": false
watbbzwu4#
在类型脚本中,
this
是函数参数中的关键字。参见this answer。
kcugc4gi5#
您可以添加
到
如这里所说