ReactTestUtils Simulate.Change тип параметра Ошибка SyntheticEventData

У меня есть приведенный ниже код, написанный на машинописном тексте, который использует 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 в моем коде. Я хочу сделать код строго типизированным.


person samAlvin    schedule 30.08.2017    source источник


Ответы (1)


вам нужно указать как неизвестное, а затем передать его в EventTarget

let nameInput = TestUtilsExtended.findRenderedDOMComponentWithTag(root, "input");

TestUtilsExtended.Simulate.change(nameInput, {
    target: {
        value : "alice"
    }
} as unknown as EventTarget);
person Sam    schedule 06.07.2020