Я пишу небольшую библиотеку, чтобы упростить работу с редуксом, но я застрял на наборе текста.
То, что я пытаюсь сделать, сводится к следующему:
- родительский класс обрабатывает дескрипторы действий в действиях
- дочерний класс предоставляет указанные дескрипторы
Проблема в том, что информация о типе, определенная в child, теряется в процессе.
Наименьший контрольный пример выглядит следующим образом:
type callable = (...args: any[]) => any
interface CallableCollection {
[s: string]: callable
}
class Parent {
functions: CallableCollection
constructor() {
this.functions = this.a;
}
get a(): CallableCollection {
return {};
}
}
class Child extends Parent {
get a() {
return {
a: (x: string) => x,
b: (x: number) => x,
}
}
}
const test = new Child();
test.a.a(5);//type error
test.functions.a(5);// no type errors
Я мог бы заставить его работать должным образом, сделав класс универсальным и предоставив все необходимые типы в качестве аргументов типа, но это выглядит крайне неубедительным с точки зрения пользователя класса.
Есть ли способ заставить его работать нормально в TS, не предоставляя типизацию в качестве аргументов в универсальном классе?