Skip to main content
Version: v8.0.0

EmitterModel

The definition form of an Emitter type. Mindset: "this specific topic".

Use EmitterModel when you are defining an emitter inside a socket SDK schema. Unlike

EmitterInstance , every unspecified field stays strict instead of falling back to

any

  • because in a definition, an omitted field means "this topic carries no payload", not "anything goes". The type system will reject mismatches at the call site instead of silently erasing them.

The socket field is also injected automatically by createSocketSdk(socket) at the SDK boundary, so you never need to repeat it inside schema declarations.

Defaults for omitted fields

FieldDefaultWhy
payload
undefined
"No payload declared."
.setData()
is required for typed bodies.
topic
string
Allows literal narrowing without erasure. Pass a string literal.
socket
SocketInstance
Injected by
createSocketSdk(socket)
; do not set this manually.
hasPayload
false
"Caller must call
.setData()
." Override only when bound.
hasParams
false
"Caller must call
.setParams()
." Override only when bound.

Import
import { EmitterModel } 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>;
}