#typescript
Вопрос:
У меня есть класс со многими методами (~200), которые для удаления я переместил в объект в классе, а фактические определения методов в ряд разных файлов. Чтобы поддерживать правильный этот контекст, я импортирую все эти методы и связываю их соответствующим образом, однако TypeScript жалуется.
The 'this' context of type 'typeof import("./methods")' is not assignable to method's 'this' of type 'Main'.
Type 'typeof import("/methods")' is missing the following properties from type 'Main': name, methods
Пример:
// index.ts
import * as methods from './methods';
export default class Main {
constructor(name: string) {
this.name = name;
}
name: string;
methods = (Object.keys(methods) as Array<keyof typeof methods>).reduce((acc, k) => {
acc[k] = methods[k].bind(this);
return acc;
}, {} as typeof methods);
}
const inst = new Main('Anga');
inst.methods.DoSomething();
// methods.ts
import Main from '.';
export function DoSomething(this: Main) {
console.log(this.name);
}
export function DoSomethingElse(this: Main, input: string) {
console.log(`${this.name}: ${input}`);
}
Как я могу утверждать, что этот контекст действительно совпадает после привязки?