enhetstesting - Simuler dataTransfer for dra-hendelser i TypeScript


Jeg skriver enhetstester for en dra-og-slipp-interaksjon som er avhengig av dataTransfer til hendelsen. Jeg bruker også TypeScript. For å simulere hendelsen(e) skrev jeg denne lille funksjonen:

function createDragEvent(eventName: string, dataTransferData?: Array<any>) {
    const event = new CustomEvent(eventName, { bubbles: true, cancelable: true });
    event.dataTransfer = {
        setData: jasmine.createSpy("setData() spy"),
        getData: jasmine.createSpy("getData() spy").and.callFake(function() {
            return dataTransferData[0] === 'text/plain' ? dataTransferData[1] : undefined;
        })
    };
    return event;
}

Men TypeScript sier til meg

TS2339: Egenskapen 'dataTransfer' finnes ikke på typen 'CustomEvent'.

Jeg kan ikke ikke bruke dataTransfer, og jeg kan ikke bruke native DragEvent-hendelser fordi jeg ikke kan sette dataene eller overvåke funksjonene dens. Finnes det en måte å håndtere dette på, f.eks. fortelle TypeScript at dataTransfer er ok, eller deaktivere feilen for denne filen, eller noe sånt?

Svar #1

Hvis noen kommer hit som jeg gjorde fordi Event-objektet i TypeScript ikke har en dataTransfer-attributt:

Bare bruk DragEvent i stedet.

Svar #2

Kunne du gjort noe slik?

const event: CustomEvent & { dataTransfer?: DataTransfer } =
    new CustomEvent(eventName, { bubbles: true, cancelable: true });

Relaterte artikler