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;

Это добавляет общую информацию о типе, необходимую для правильного вывода на основе предоставленного вами конструктора.

Другие вопросы по тегам