TS2339: свойство не существует для типа {}
Пожалуйста, помогите мне исправить эту ошибку компиляции.
Ниже вы можете увидеть компилятор, жалующийся на то, что объект Actions в строке 20 (для ясности я удалил несколько строк перед публикацией): {}:
Но ниже вы можете увидеть в actions.ts, что Actions - это объект типа Actions, и он имеет запрошенное свойство (которое является функцией):
И в базовом коде вы можете увидеть в определении DefiniteTyped Alt, что createActions должен возвращать объект типа Actions:
Так почему же Typescript жалуется, что Actions не относятся к типу Actions?
1 ответ
Вы используете модуль под названием "app/actions/actions"
, Этот модуль на самом деле не модуль (карта свойств), но независимо от того, что результат flux.createACtions(Actions)
:
export = flux.createActions(Actions); // in actions.ts
Что это возвращает? Потому что вы не указываете общий для <T>
и потому что createActions
не правильно включать T
из которого можно сделать вывод, предполагается, что T
просто {}
, Это обсуждалось здесь и в конечном итоге отклонено. Итак, как уже упоминалось, вам нужно указать общий:
export = flux.createActions<Actions>(Actions);
Но чтобы избежать этого, вы можете изменить свой локальный (или удаленный) alt.d.ts
быть чем-то вроде:
class Alt {
createActions<T extends ActionsClass>(con: ActionsClassConstructor<T>, ...): T;
}
type ActionsClassConstructor<T extends ActionsClass> = new (alt:Alt) => T;
Это добавляет общую информацию о типе, необходимую для правильного вывода на основе предоставленного вами конструктора.