У меня есть приведенный ниже код, написанный на машинописном тексте, который использует ReactTestUtils из «react-dom / test-utils».
let nameInput = TestUtilsExtended.findRenderedDOMComponentWithTag(root, "input");
TestUtilsExtended.Simulate.change(nameInput, {
target: {
value : "alice"
}
} as any);
Он работает нормально, и результат такой, как задумано, когда я поставил это as any
кастинг. Если я удалю кастинг, возникает такая ошибка:
[ts] Аргумент типа '{цель: {значение: строка; }; } 'не может быть назначен параметру типа SyntheticEventData. Типы собственности "target" несовместимы. Тип '{значение: строка; } 'не может быть назначен типу' EventTarget '. Литерал объекта может указывать только известные свойства, а «значение» не существует в типе «EventTarget».
Вот intellisense для Simulate.change
, который я получил от @types/react-dom (version: ^15.5.4)
:
const Simulate.change: (element: React.ReactInstance, eventData?: SyntheticEventData) => void
В объявлении интерфейса SyntheticEventData
я обнаружил, что типом свойства target
является Javascript EventTarget
:
export interface OptionalEventProperties {
// ....
target?: EventTarget;
}
export interface SyntheticEventData extends OptionalEventProperties {
// ....
}
Поскольку код работает так, как задумано, когда я использую преобразование as any
, я не совсем понимаю, как работает этот EventTarget
интерфейс.
Вы, ребята, знаете, как удалить as any
преобразование? Потому что, если возможно, я бы хотел свести к минимуму приведение чего-либо к any
в моем коде. Я хочу сделать код строго типизированным.