import { Payload, SerializableValue, Transferable } from '../types'; import AbstractCommunicator from './AbstractCommunicator'; export interface EventTarget { addEventListener(type: string, callback: (e: MessageEvent) => void): any; removeEventListener(type: string, callback: (e: MessageEvent) => void): any; } export default abstract class AbstractMessageChannelCommunicator extends AbstractCommunicator { protected target: T; protected removeEventListener: () => void; constructor(target: T); send(payload: Payload): void; abstract sendPayload(serializable: SerializableValue, transferables: Transferable[]): void; close(): void; }