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 { 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>;
}
