Skip to main content
Version: v8.0.0

EmitterInstance

The constraint form of an Emitter type. Mindset: "any Emitter that matches this partial shape".

Use EmitterInstance when you are writing a reusable abstraction that accepts emitters from the outside - generic helpers ( <T extends EmitterInstance> ), reusable UI components / hooks, sdk.$configure({...}) callbacks, mocking utilities, return types, etc.

Unspecified generic parameters default to any on purpose: an omitted field means "I do not care about that field, the caller picks anything". This is exactly what you want for a constraint - any concrete Emitter satisfies it. Partial constraints work too:

EmitterInstance<{ payload: { text: string } }> accepts every emitter whose payload has a

text field, regardless of topic, params, etc.

For describing a single topic inside a socket SDK schema, use EmitterModel instead.

EmitterModel uses safe non- any defaults ( undefined , string , false ) so omitted fields stay strict instead of silently collapsing to any .


Import
import { EmitterInstance } from "@hyper-fetch/sockets"

Preview

class Emitter<Payload, Topic, Socket, HasPayload, HasParams> {
constructor(socket: Socket, emitterOptions: EmitterOptionsType<Topic, ExtractSocketAdapterType<Socket>>) {};
topic: Topic;
socket: Socket;
payload: undefined | Payload;
params: ParamsType;
options: undefined | ExtractAdapterEmitterOptionsType<ExtractSocketAdapterType<Socket>>;
emitterOptions: EmitterOptionsType<Topic, ExtractSocketAdapterType<Socket>>;
emit() => EmitType<Emitter<Payload, Topic, Socket, HasPayload, HasParams>>;
clone<NewPayload, NewHasPayload, NewHasParams>(config?: EmitterCloneOptionsType<NewPayload, ParamsType, Topic, Socket>) => Emitter<NewPayload, Topic, Socket, NewHasPayload, NewHasParams>;
setOptions(options: undefined | ExtractAdapterEmitterOptionsType<ExtractSocketAdapterType<Socket>>) => Emitter<Payload, Topic, Socket, HasPayload, HasParams>;
setParams(params: NonNullable<ExtractUrlParams<Topic>>) => Emitter<Payload, Topic, Socket, HasPayload, true>;
setPayload<D>(payload: D) => Emitter<D, Topic, Socket, D extends EmptyTypes ? false : true, HasParams>;
setPayloadMapper<DataMapper>(payloadMapper: DataMapper) => Emitter<Payload, Topic, Socket, HasPayload, HasParams>;
}