Khi tôi cho phép noImplicitThis
trong tsconfig.json
, tôi nhận được lỗi này cho đoạn mã sau:
'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`
});
Việc thêm một đã nhập this
vào các tham số gọi lại dẫn đến cùng một lỗi:
foo.on('error', (this: Foo, err: any) => { // error: `this` implicitly has type `any`
Một cách giải quyết là thay thế this
bằng đối tượng:
foo.on('error', (err: any) => {
console.log(err);
foo.emit('end');
});
Nhưng cách khắc phục thích hợp cho lỗi này là gì?
CẬP NHẬT: Hóa ra việc thêm một đã nhập this
vào lệnh gọi lại thực sự giải quyết được lỗi. Tôi gặp lỗi vì tôi đang sử dụng hàm mũi tên với chú thích loại cho this
:
this
.