Skip to content

mixinAsyncEvents<EventMap>

Mixin that adds AsyncEventSource delegation to a base class.

All event methods delegate to a private AsyncEventsBase instance. The EventMap generic is fixed at mixin-application time — if you need a class that is itself generic over its event map, use composition instead.

Import:

import { mixinAsyncEvents } from 'obsidian-dev-utils/async-events';

Example:

interface MyEvents {
save: [data: string];
}
class MyComponent extends mixinAsyncEvents<MyEvents>()(Component) {
// on(), off(), once(), offref() are available
}

Signature:

function mixinAsyncEvents(): <TBase extends AbstractConstructor<object>>(baseClass: TBase) => AbstractConstructor<AsyncEventSource<EventMap> & AsyncEventTrigger<EventMap>> & TBase

Returns: <TBase extends AbstractConstructor<object>>(baseClass: TBase) => AbstractConstructor<AsyncEventSource<EventMap> & AsyncEventTrigger<EventMap>> & TBase — A function that takes a base class and returns a new class extending it with AsyncEventSource.

Example:

interface MyEvents {
save: [data: string];
}
class MyComponent extends mixinAsyncEvents<MyEvents>()(Component) {
// on(), off(), once(), offref() are available
}