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
| Field | Default | Why |
|---|---|---|
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"
Source
Package
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>;
}
