Skip to content

Commit

Permalink
Revert ‘no argument’ conditional type from #3301
Browse files Browse the repository at this point in the history
  • Loading branch information
steveluscher committed Oct 4, 2024
1 parent d32e6d6 commit b4320f5
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 10 deletions.
20 changes: 18 additions & 2 deletions packages/subscribable/src/__typetests__/data-publisher-typetest.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* eslint-disable @typescript-eslint/ban-ts-comment */

import { DataPublisher, getDataPublisherFromEventEmitter } from '../data-publisher';
import { TypedEventEmitter } from '../event-emitter';
import { TypedEventEmitter, TypedEventTarget } from '../event-emitter';

type ChannelMap = {
fall: null;
Expand All @@ -12,7 +12,7 @@ const publisher = null as unknown as DataPublisher<ChannelMap>;

// [DESCRIBE] getDataPublisherFromEventEmitter
{
// It materializes listener signatures based on the events of the emitter
// It materializes listener signatures based on the events of an event emitter
{
const eventEmitter = null as unknown as TypedEventEmitter<{
baz: Event;
Expand All @@ -23,6 +23,22 @@ const publisher = null as unknown as DataPublisher<ChannelMap>;
data satisfies 'bar';
});
publisher.on('baz', (...args) => {
// @ts-ignore FIXME: The actual implementation supplies no arguments, not `null`
args satisfies [];
});
}
// It materializes listener signatures based on the events of an event target
{
const eventTarget = null as unknown as TypedEventTarget<{
baz: Event;
foo: CustomEvent<'bar'>;
}>;
const publisher = getDataPublisherFromEventEmitter(eventTarget);
publisher.on('foo', data => {
data satisfies 'bar';
});
publisher.on('baz', (...args) => {
// @ts-ignore FIXME: The actual implementation supplies no arguments, not `null`
args satisfies [];
});
}
Expand Down
12 changes: 4 additions & 8 deletions packages/subscribable/src/data-publisher.ts
Original file line number Diff line number Diff line change
@@ -1,23 +1,19 @@
import { TypedEventEmitter } from './event-emitter';
import { TypedEventEmitter, TypedEventTarget } from './event-emitter';

type UnsubscribeFn = () => void;

export interface DataPublisher<TDataByChannelName extends Record<string, unknown> = Record<string, unknown>> {
on<const TChannelName extends keyof TDataByChannelName>(
channelName: TChannelName,
subscriber: (
...data: TDataByChannelName[TChannelName] extends never ? [] : [data: TDataByChannelName[TChannelName]]
) => void,
subscriber: (data: TDataByChannelName[TChannelName]) => void,
options?: { signal: AbortSignal },
): UnsubscribeFn;
}

export function getDataPublisherFromEventEmitter<TEventMap extends Record<string, Event>>(
eventEmitter: TypedEventEmitter<TEventMap>,
eventEmitter: TypedEventEmitter<TEventMap> | TypedEventTarget<TEventMap>,
): DataPublisher<{
[TEventType in keyof TEventMap]: TEventMap[TEventType] extends CustomEvent
? TEventMap[TEventType]['detail']
: never;
[TEventType in keyof TEventMap]: TEventMap[TEventType] extends CustomEvent ? TEventMap[TEventType]['detail'] : null;
}> {
return {
on(channelName, subscriber, options) {
Expand Down

0 comments on commit b4320f5

Please sign in to comment.