Когда я включаю noImplicitThis
в tsconfig.json
, я получаю эту ошибку для следующего кода:
'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');
});
Но как правильно исправить эту ошибку?
ОБНОВЛЕНИЕ: Оказывается, добавление типизированного this
к обратному вызову действительно устраняет ошибку. Я видел ошибку, потому что использовал стрелочную функцию с аннотацией типа для this
:
typescript
typescript2.0
tony19
источник
источник
this
.Ответы:
Ошибка действительно исправляется путем вставки
this
аннотации типа в качестве первого параметра обратного вызова. Моя попытка сделать это была неудачной, поскольку я одновременно изменил обратный вызов на стрелочную функцию:Должно было быть так:
или это:
Проблема GitHub была создана, чтобы улучшить сообщение об ошибке компилятора и выделить фактическую грамматическую ошибку с помощью
this
стрелочных функций и.источник
this
это будет тип инициализируемого класса. Например, еслиconstructor
класс предназначенMyClass
, аннотация типа для классаthis
будетMyClass
.