diff --git a/types/backbone-relational/index.d.ts b/types/backbone-relational/index.d.ts
index f237f27ea1..5d66ebfef9 100644
--- a/types/backbone-relational/index.d.ts
+++ b/types/backbone-relational/index.d.ts
@@ -7,7 +7,7 @@
///
-import { Events, EventMap, Model as BModel, Collection } from 'backbone';
+import { EventsMixin, Events, Model as BModel, Collection } from 'backbone';
declare module 'backbone-relational' {
class Model extends BModel {
@@ -123,22 +123,7 @@ declare module 'backbone-relational' {
}
- export class Store implements Events {
- on(eventName: string, callback?: (...args: any[]) => void, context?: any): any;
- on(eventMap: EventMap, context?: any): any;
- on(eventName: any, callback?: any, context?: any): any;
- off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any;
- trigger(eventName: string, ...args: any[]): any;
- bind(eventName: string, callback: (...args: any[]) => void, context?: any): any;
- unbind(eventName?: string, callback?: (...args: any[]) => void, context?: any): any;
- once(events: string, callback: (...args: any[]) => void, context?: any): any;
- once(eventMap: EventMap, context?: any): any;
- listenTo(object: any, events: string, callback: (...args: any[]) => void): any;
- listenTo(object: any, eventMap: EventMap): any;
- listenToOnce(object: any, events: string, callback: (...args: any[]) => void): any;
- listenToOnce(object: any, eventMap: EventMap): any;
- stopListening(object?: any, events?: string, callback?: (...args: any[]) => void): any;
-
+ export class Store extends EventsMixin implements Events {
initializeRelation(model, relation, options);
addModelScope(scope:any):void;
diff --git a/types/backbone.marionette/index.d.ts b/types/backbone.marionette/index.d.ts
index 42ab3ecc35..f24d80ff4d 100644
--- a/types/backbone.marionette/index.d.ts
+++ b/types/backbone.marionette/index.d.ts
@@ -408,24 +408,14 @@ export interface ObjectOptions extends RadioMixinOptions {
* A base class which other classes can extend from. Object incorporates many
* backbone conventions and utilities like initialize and Backbone.Events.
*/
-export class Object implements CommonMixin, RadioMixin, Backbone.Events {
+export class Object extends Backbone.EventsMixin implements CommonMixin, RadioMixin, Backbone.Events {
constructor(options?: ObjectOptions);
- on(eventName: string, callback?: (...args: any[]) => void, context?: any): any;
- on(eventMap: Backbone.EventMap, context?: any): any;
+ /**
+ * Faulty overgeneralization of Backbone.Events.on, for historical
+ * reasons.
+ */
on(eventName: any, callback?: any, context?: any): any;
- off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any;
- trigger(eventName: string, ...args: any[]): any;
- bind(eventName: string, callback: (...args: any[]) => void, context?: any): any;
- unbind(eventName?: string, callback?: (...args: any[]) => void, context?: any): any;
-
- once(events: string, callback: (...args: any[]) => void, context?: any): any;
- once(eventMap: Backbone.EventMap, context?: any): any;
- listenTo(object: any, events: string, callback: (...args: any[]) => void): any;
- listenTo(object: any, eventMap: Backbone.EventMap): any;
- listenToOnce(object: any, events: string, callback: (...args: any[]) => void): any;
- listenToOnce(object: any, eventMap: Backbone.EventMap): any;
- stopListening(object?: any, events?: string, callback?: (...args: any[]) => void): any;
/**
* Receives a hash of event names and functions and/or function names,
diff --git a/types/backbone.radio/index.d.ts b/types/backbone.radio/index.d.ts
index a0901b6b49..e6682bd52e 100644
--- a/types/backbone.radio/index.d.ts
+++ b/types/backbone.radio/index.d.ts
@@ -72,22 +72,12 @@ declare module "backbone" {
stopReplying(commandName?: string, callback?: (...args: any[]) => any, context?: any): Requests;
}
- class Channel implements Commands, Requests, Backbone.Events {
- on(eventName: string, callback?: (...args: any[]) => void, context?: any): any;
- on(eventMap: EventMap, context?: any): any;
+ class Channel extends Backbone.EventsMixin implements Commands, Requests, Backbone.Events {
+ /**
+ * Faulty overgeneralization of Backbone.Events.on, for historical
+ * reasons.
+ */
on(eventName: any, callback?: any, context?: any): any;
- off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any;
- trigger(eventName: string, ...args: any[]): any;
- bind(eventName: string, callback: (...args: any[]) => void, context?: any): any;
- unbind(eventName?: string, callback?: (...args: any[]) => void, context?: any): any;
-
- once(events: string, callback: (...args: any[]) => void, context?: any): any;
- once(eventMap: EventMap, context?: any): any;
- listenTo(object: any, events: string, callback: (...args: any[]) => void): any;
- listenTo(object: any, eventMap: EventMap): any;
- listenToOnce(object: any, events: string, callback: (...args: any[]) => void): any;
- listenToOnce(object: any, eventMap: EventMap): any;
- stopListening(object?: any, events?: string, callback?: (...args: any[]) => void): any;
channelName: string;
reset(): Channel;
diff --git a/types/backbone/index.d.ts b/types/backbone/index.d.ts
index ee469bf9eb..1171dac918 100644
--- a/types/backbone/index.d.ts
+++ b/types/backbone/index.d.ts
@@ -109,8 +109,16 @@ declare namespace Backbone {
[event: string]: EventHandler;
}
- export const Events: Events;
- interface Events {
+ /**
+ * Helper to avoid code repetition. Backbone.Events cannot be extended,
+ * hence a separate abstract class with a different name.
+ * Both classes and interfaces can extend from this helper class to
+ * reuse the signatures, but only in type declarations.
+ * Classes that already extend another base class can still
+ * `implements Events`, but in this case, unfortunately you have to
+ * repeat all signatures below.
+ */
+ abstract class EventsMixin implements Events {
on(eventName: string, callback?: (...args: any[]) => void, context?: any): any;
on(eventMap: EventMap, context?: any): any;
off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any;
@@ -127,28 +135,16 @@ declare namespace Backbone {
stopListening(object?: any, events?: string, callback?: (...args: any[]) => void): any;
}
- class ModelBase implements Events {
- on(eventName: string, callback?: Function, context?: any): any;
- on(eventMap: EventMap, context?: any): any;
- on(eventName: any, callback?: any, context?: any): any
- off(eventName?: string, callback?: Function, context?: any): any
- trigger(eventName: string, ...args: any[]): any
- bind(eventName: string, callback: Function, context?: any): any
- unbind(eventName?: string, callback?: Function, context?: any): any
- once(events: string, callback: Function, context?: any): any
- once(eventMap: EventMap, context?: any): any;
- listenTo(object: any, events: string, callback: Function):any
- listenTo(object: any, eventMap: EventMap): any;
- listenToOnce(object: any, events: string, callback: Function): any
- listenToOnce(object: any, eventMap: EventMap): any;
- stopListening(object?: any, events?: string, callback?: Function): any
+ export const Events: Events;
+ interface Events extends EventsMixin { }
+ class ModelBase extends EventsMixin {
parse(response: any, options?: any): any;
toJSON(options?: any): any;
sync(...arg: any[]): JQueryXHR;
}
- class Model extends ModelBase {
+ class Model extends ModelBase implements Events {
/**
* Do not use, prefer TypeScript's extend functionality.
@@ -249,7 +245,7 @@ declare namespace Backbone {
matches(attrs: any): boolean;
}
- class Collection extends ModelBase {
+ class Collection extends ModelBase implements Events {
/**
* Do not use, prefer TypeScript's extend functionality.
@@ -387,7 +383,7 @@ declare namespace Backbone {
without(...values: TModel[]): TModel[];
}
- class Router extends EventSignatures {
+ class Router extends EventsMixin implements Events {
/**
* Do not use, prefer TypeScript's extend functionality.
@@ -416,7 +412,7 @@ declare namespace Backbone {
var history: History;
- class History extends EventSignatures {
+ class History extends EventsMixin implements Events {
handlers: any[];
interval: number;
@@ -453,7 +449,7 @@ declare namespace Backbone {
attributes?: {[id: string]: any};
}
- class View extends EventSignatures {
+ class View extends EventsMixin implements Events {
/**
* Do not use, prefer TypeScript's extend functionality.
@@ -505,24 +501,3 @@ declare namespace Backbone {
function noConflict(): typeof Backbone;
var $: JQueryStatic;
}
-
-/**
- * This is not for external use and is only here as a convenient way to
- * specify signatures for internal implementers of Backbone.Events
- */
-declare abstract class EventSignatures implements Backbone.Events {
- on(eventName: string, callback?: (...args: any[]) => void, context?: any): any;
- on(eventMap: Backbone.EventMap, context?: any): any;
- off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any;
- trigger(eventName: string, ...args: any[]): any;
- bind(eventName: string, callback: (...args: any[]) => void, context?: any): any;
- unbind(eventName?: string, callback?: (...args: any[]) => void, context?: any): any;
-
- once(events: string, callback: (...args: any[]) => void, context?: any): any;
- once(eventMap: Backbone.EventMap, context?: any): any;
- listenTo(object: any, events: string, callback: (...args: any[]) => void): any;
- listenTo(object: any, eventMap: Backbone.EventMap): any;
- listenToOnce(object: any, events: string, callback: (...args: any[]) => void): any;
- listenToOnce(object: any, eventMap: Backbone.EventMap): any;
- stopListening(object?: any, events?: string, callback?: (...args: any[]) => void): any;
-}
\ No newline at end of file
diff --git a/types/giraffe/index.d.ts b/types/giraffe/index.d.ts
index 5911301460..1758823c7d 100644
--- a/types/giraffe/index.d.ts
+++ b/types/giraffe/index.d.ts
@@ -145,22 +145,12 @@ declare namespace Giraffe {
namespace Contrib {
- class Controller implements GiraffeObject, Backbone.Events {
- on(eventName: string, callback?: (...args: any[]) => void, context?: any);
- on(eventMap: Backbone.EventMap, context?: any): any;
+ class Controller extends Backbone.EventsMixin implements GiraffeObject, Backbone.Events {
+ /**
+ * Faulty overgeneralization of Backbone.Events.on, for historical
+ * reasons.
+ */
on(eventName: any, callback?: any, context?: any)
- off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any;
- trigger(eventName: string, ...args: any[]): any;
- bind(eventName: string, callback: (...args: any[]) => void, context?: any): any;
- unbind(eventName?: string, callback?: (...args: any[]) => void, context?: any): any;
-
- once(events: string, callback: (...args: any[]) => void, context?: any): any;
- once(eventMap: Backbone.EventMap, context?: any): any;
- listenTo(object: any, events: string, callback: (...args: any[]) => void): any;
- listenTo(object: any, eventMap: Backbone.EventMap): any;
- listenToOnce(object: any, events: string, callback: (...args: any[]) => void): any;
- listenToOnce(object: any, eventMap: Backbone.EventMap): any;
- stopListening(object?: any, events?: string, callback?: (...args: any[]) => void): any;
app: App;
}