From 5cb38fe47278a9e284061f22f1a2c4a98f150275 Mon Sep 17 00:00:00 2001 From: "J. Joe Douglas" Date: Sat, 3 Nov 2018 14:23:04 -0400 Subject: [PATCH 1/2] Backbone.Event is an object, not class --- types/backbone-relational/index.d.ts | 14 +++++++++- types/backbone.marionette/index.d.ts | 14 +++++++++- types/backbone.radio/index.d.ts | 13 ++++++++- types/backbone/backbone-tests.ts | 2 +- types/backbone/index.d.ts | 42 ++++++++++++++++++++++++---- types/giraffe/index.d.ts | 14 +++++++++- 6 files changed, 89 insertions(+), 10 deletions(-) diff --git a/types/backbone-relational/index.d.ts b/types/backbone-relational/index.d.ts index a1c8c3eefb..e563f19fb1 100644 --- a/types/backbone-relational/index.d.ts +++ b/types/backbone-relational/index.d.ts @@ -122,7 +122,19 @@ declare module 'backbone' { } - export class Store extends Events { + export class Store implements Events { + on(eventName: string, callback?: Function, context?: any): any; + on(eventMap: EventsHash): 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; + listenTo(object: any, events: string, callback: Function): any; + listenToOnce(object: any, events: string, callback: Function): any; + stopListening(object?: any, events?: string, callback?: Function): any; + 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 609bf37b67..3a32afac71 100644 --- a/types/backbone.marionette/index.d.ts +++ b/types/backbone.marionette/index.d.ts @@ -407,9 +407,21 @@ 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 extends Backbone.Events implements CommonMixin, RadioMixin { +export class Object implements CommonMixin, RadioMixin, Backbone.Events { constructor(options?: ObjectOptions); + on(eventName: string, callback?: () => void, context?: any): any; + on(eventMap: EventsHash): any; + on(eventName: any, callback?: any, context?: any): any; + off(eventName?: string, callback?: () => void, context?: any): any; + trigger(eventName: string, ...args: any[]): any; + bind(eventName: string, callback: () => void, context?: any): any; + unbind(eventName?: string, callback?: () => void, context?: any): any; + once(events: string, callback: () => void, context?: any): any; + listenTo(object: any, events: string, callback: () => void): any; + listenToOnce(object: any, events: string, callback: () => void): any; + stopListening(object?: any, events?: string, callback?: () => void): any; + /** * Receives a hash of event names and functions and/or function names, * and returns the same hash with the function names replaced with the diff --git a/types/backbone.radio/index.d.ts b/types/backbone.radio/index.d.ts index 12fc6d384f..171c038842 100644 --- a/types/backbone.radio/index.d.ts +++ b/types/backbone.radio/index.d.ts @@ -71,7 +71,18 @@ declare module "backbone" { stopReplying(commandName?: string, callback?: (...args: any[]) => any, context?: any): Requests; } - class Channel extends Backbone.Events implements Commands, Requests { + class Channel implements Commands, Requests, Backbone.Events { + on(eventName: string, callback?: Function, context?: any): any; + on(eventMap: EventsHash): 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; + listenTo(object: any, events: string, callback: Function): any; + listenToOnce(object: any, events: string, callback: Function): any; + stopListening(object?: any, events?: string, callback?: Function): any; channelName: string; reset(): Channel; diff --git a/types/backbone/backbone-tests.ts b/types/backbone/backbone-tests.ts index 65a1463978..563c21634c 100644 --- a/types/backbone/backbone-tests.ts +++ b/types/backbone/backbone-tests.ts @@ -1,6 +1,6 @@ function test_events() { - var object = new Backbone.Events(); + var object = Backbone.Events; object.on("alert", (eventName: string) => alert("Triggered " + eventName)); object.trigger("alert", "an event"); diff --git a/types/backbone/index.d.ts b/types/backbone/index.d.ts index 81bce43606..cabb6169ab 100644 --- a/types/backbone/index.d.ts +++ b/types/backbone/index.d.ts @@ -3,6 +3,7 @@ // Definitions by: Boris Yankov // Natan Vivo // kenjiru +// jjoekoullas // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.3 @@ -94,7 +95,8 @@ declare namespace Backbone { [selector: string]: string | {(eventObject: JQueryEventObject): void}; } - class Events { + export const Events: Events; + interface Events { on(eventName: string, callback?: Function, context?: any): any; on(eventMap: EventsHash): any; off(eventName?: string, callback?: Function, context?: any): any; @@ -108,7 +110,19 @@ declare namespace Backbone { stopListening(object?: any, events?: string, callback?: Function): any; } - class ModelBase extends Events { + class ModelBase implements Events { + on(eventName: string, callback?: Function, context?: any): any; + on(eventMap: EventsHash): 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 + listenTo(object: any, events: string, callback: Function):any + listenToOnce(object: any, events: string, callback: Function): any + stopListening(object?: any, events?: string, callback?: Function): any + parse(response: any, options?: any): any; toJSON(options?: any): any; sync(...arg: any[]): JQueryXHR; @@ -353,7 +367,7 @@ declare namespace Backbone { without(...values: TModel[]): TModel[]; } - class Router extends Events { + class Router extends EventSignatures { /** * Do not use, prefer TypeScript's extend functionality. @@ -382,7 +396,7 @@ declare namespace Backbone { var history: History; - class History extends Events { + class History extends EventSignatures { handlers: any[]; interval: number; @@ -419,7 +433,7 @@ declare namespace Backbone { attributes?: {[id: string]: any}; } - class View extends Events { + class View extends EventSignatures { /** * Do not use, prefer TypeScript's extend functionality. @@ -471,3 +485,21 @@ 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?: Function, context?: any): any; + on(eventMap: Backbone.EventsHash): 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; + listenTo(object: any, events: string, callback: Function): any; + listenToOnce(object: any, events: string, callback: Function): any; + stopListening(object?: any, events?: string, callback?: Function): any; +} \ No newline at end of file diff --git a/types/giraffe/index.d.ts b/types/giraffe/index.d.ts index 6b88b5d4b8..3cab015ac5 100644 --- a/types/giraffe/index.d.ts +++ b/types/giraffe/index.d.ts @@ -145,7 +145,19 @@ declare namespace Giraffe { namespace Contrib { - class Controller extends Backbone.Events implements GiraffeObject { + class Controller implements GiraffeObject, Backbone.Events { + on(eventName: string, callback?: Function, context?: any); + on(eventMap: Backbone.EventsHash); + on(eventName: any, callback?: any, context?: any) + off(eventName?: string, callback?: Function, context?: any) + trigger(eventName: string, ...args: any[]) + bind(eventName: string, callback: Function, context?: any) + unbind(eventName?: string, callback?: Function, context?: any) + once(events: string, callback: Function, context?: any): any; + listenTo(object: any, events: string, callback: Function): any; + listenToOnce(object: any, events: string, callback: Function): any; + stopListening(object?: any, events?: string, callback?: Function): any; + app: App; } From 5d2d49832ac9b8b4aef880b286b050babf3a9a41 Mon Sep 17 00:00:00 2001 From: "J. Joe Douglas" Date: Tue, 20 Nov 2018 20:43:08 -0500 Subject: [PATCH 2/2] no Functions --- .../backbone-fetch-cache-tests.ts | 4 +-- types/backbone-relational/index.d.ts | 16 ++++----- types/backbone.marionette/index.d.ts | 16 ++++----- .../backbone.paginator-tests.ts | 4 +-- types/backbone.radio/index.d.ts | 16 ++++----- types/backbone/index.d.ts | 34 +++++++++---------- types/giraffe/index.d.ts | 20 +++++------ 7 files changed, 55 insertions(+), 55 deletions(-) diff --git a/types/backbone-fetch-cache/backbone-fetch-cache-tests.ts b/types/backbone-fetch-cache/backbone-fetch-cache-tests.ts index 072e3c29ce..6c2d852961 100644 --- a/types/backbone-fetch-cache/backbone-fetch-cache-tests.ts +++ b/types/backbone-fetch-cache/backbone-fetch-cache-tests.ts @@ -64,7 +64,7 @@ const modelOpts: Backbone.ModelFetchWithCacheOptions = { context: {}, }; -const hoge = new Backbone.Model; +const hoge = new Backbone.Model() as Backbone.ModelWithCache; hoge.fetch(modelOpts); const collectionOpts: Backbone.CollectionFetchWithCacheOptions = { @@ -76,5 +76,5 @@ const collectionOpts: Backbone.CollectionFetchWithCacheOptions = { prefillSuccess: (self: any) => { }, }; -const fuga = new Backbone.Collection; +const fuga = new Backbone.Collection() as Backbone.CollectionWithCache; fuga.fetch(collectionOpts); diff --git a/types/backbone-relational/index.d.ts b/types/backbone-relational/index.d.ts index e563f19fb1..403759ac97 100644 --- a/types/backbone-relational/index.d.ts +++ b/types/backbone-relational/index.d.ts @@ -123,17 +123,17 @@ declare module 'backbone' { } export class Store implements Events { - on(eventName: string, callback?: Function, context?: any): any; + on(eventName: string, callback?: (...args: any[]) => void, context?: any): any; on(eventMap: EventsHash): any; on(eventName: any, callback?: any, context?: any): any; - off(eventName?: string, callback?: Function, context?: any): any; + off(eventName?: string, callback?: (...args: any[]) => void, 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; - listenTo(object: any, events: string, callback: Function): any; - listenToOnce(object: any, events: string, callback: Function): any; - stopListening(object?: any, events?: string, callback?: Function): 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; + listenTo(object: any, events: string, callback: (...args: any[]) => void): any; + listenToOnce(object: any, events: string, callback: (...args: any[]) => void): any; + stopListening(object?: any, events?: string, callback?: (...args: any[]) => void): any; initializeRelation(model, relation, options); diff --git a/types/backbone.marionette/index.d.ts b/types/backbone.marionette/index.d.ts index 3a32afac71..4edaba87b7 100644 --- a/types/backbone.marionette/index.d.ts +++ b/types/backbone.marionette/index.d.ts @@ -410,17 +410,17 @@ export interface ObjectOptions extends RadioMixinOptions { export class Object implements CommonMixin, RadioMixin, Backbone.Events { constructor(options?: ObjectOptions); - on(eventName: string, callback?: () => void, context?: any): any; + on(eventName: string, callback?: (...args: any[]) => void, context?: any): any; on(eventMap: EventsHash): any; on(eventName: any, callback?: any, context?: any): any; - off(eventName?: string, callback?: () => void, context?: any): any; + off(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; trigger(eventName: string, ...args: any[]): any; - bind(eventName: string, callback: () => void, context?: any): any; - unbind(eventName?: string, callback?: () => void, context?: any): any; - once(events: string, callback: () => void, context?: any): any; - listenTo(object: any, events: string, callback: () => void): any; - listenToOnce(object: any, events: string, callback: () => void): any; - stopListening(object?: any, events?: string, callback?: () => void): 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; + listenTo(object: any, events: string, callback: (...args: any[]) => void): any; + listenToOnce(object: any, events: string, callback: (...args: any[]) => void): 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.paginator/backbone.paginator-tests.ts b/types/backbone.paginator/backbone.paginator-tests.ts index f24e2855f5..0c1b0cf9a8 100644 --- a/types/backbone.paginator/backbone.paginator-tests.ts +++ b/types/backbone.paginator/backbone.paginator-tests.ts @@ -70,8 +70,8 @@ namespace InitializingWithOptions { }); var testCollection6 = new TestCollection([ - {}, - {}, + {} as TestModel, + {} as TestModel, ]); } diff --git a/types/backbone.radio/index.d.ts b/types/backbone.radio/index.d.ts index 171c038842..ac953aa00b 100644 --- a/types/backbone.radio/index.d.ts +++ b/types/backbone.radio/index.d.ts @@ -72,17 +72,17 @@ declare module "backbone" { } class Channel implements Commands, Requests, Backbone.Events { - on(eventName: string, callback?: Function, context?: any): any; + on(eventName: string, callback?: (...args: any[]) => void, context?: any): any; on(eventMap: EventsHash): any; on(eventName: any, callback?: any, context?: any): any; - off(eventName?: string, callback?: Function, context?: any): any; + off(eventName?: string, callback?: (...args: any[]) => void, 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; - listenTo(object: any, events: string, callback: Function): any; - listenToOnce(object: any, events: string, callback: Function): any; - stopListening(object?: any, events?: string, callback?: Function): 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; + listenTo(object: any, events: string, callback: (...args: any[]) => void): any; + listenToOnce(object: any, events: string, callback: (...args: any[]) => void): 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 cabb6169ab..ca36541735 100644 --- a/types/backbone/index.d.ts +++ b/types/backbone/index.d.ts @@ -97,23 +97,23 @@ declare namespace Backbone { export const Events: Events; interface Events { - on(eventName: string, callback?: Function, context?: any): any; + on(eventName: string, callback?: (...args: any[]) => void, context?: any): any; on(eventMap: EventsHash): any; - off(eventName?: string, callback?: Function, context?: any): any; + off(eventName?: string, callback?: (...args: any[]) => void, 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; + bind(eventName: string, callback: (...args: any[]) => void, context?: any): any; + unbind(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; - once(events: string, callback: Function, context?: any): any; - listenTo(object: any, events: string, callback: Function): any; - listenToOnce(object: any, events: string, callback: Function): any; - stopListening(object?: any, events?: string, callback?: Function): any; + once(events: string, callback: (...args: any[]) => void, context?: any): any; + listenTo(object: any, events: string, callback: (...args: any[]) => void): any; + listenToOnce(object: any, events: string, callback: (...args: any[]) => void): any; + stopListening(object?: any, events?: string, callback?: (...args: any[]) => void): any; } class ModelBase implements Events { on(eventName: string, callback?: Function, context?: any): any; on(eventMap: EventsHash): any; - on(eventName: any, callback?: any, 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 @@ -491,15 +491,15 @@ declare namespace Backbone { * specify signatures for internal implementers of Backbone.Events */ declare abstract class EventSignatures implements Backbone.Events { - on(eventName: string, callback?: Function, context?: any): any; + on(eventName: string, callback?: (...args: any[]) => void, context?: any): any; on(eventMap: Backbone.EventsHash): any; - off(eventName?: string, callback?: Function, context?: any): any; + off(eventName?: string, callback?: (...args: any[]) => void, 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; + bind(eventName: string, callback: (...args: any[]) => void, context?: any): any; + unbind(eventName?: string, callback?: (...args: any[]) => void, context?: any): any; - once(events: string, callback: Function, context?: any): any; - listenTo(object: any, events: string, callback: Function): any; - listenToOnce(object: any, events: string, callback: Function): any; - stopListening(object?: any, events?: string, callback?: Function): any; + once(events: string, callback: (...args: any[]) => void, context?: any): any; + listenTo(object: any, events: string, callback: (...args: any[]) => void): any; + listenToOnce(object: any, events: string, callback: (...args: any[]) => void): 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 3cab015ac5..abce777c20 100644 --- a/types/giraffe/index.d.ts +++ b/types/giraffe/index.d.ts @@ -146,17 +146,17 @@ declare namespace Giraffe { namespace Contrib { class Controller implements GiraffeObject, Backbone.Events { - on(eventName: string, callback?: Function, context?: any); + on(eventName: string, callback?: (...args: any[]) => void, context?: any); on(eventMap: Backbone.EventsHash); - on(eventName: any, callback?: any, context?: any) - off(eventName?: string, callback?: Function, context?: any) - trigger(eventName: string, ...args: any[]) - bind(eventName: string, callback: Function, context?: any) - unbind(eventName?: string, callback?: Function, context?: any) - once(events: string, callback: Function, context?: any): any; - listenTo(object: any, events: string, callback: Function): any; - listenToOnce(object: any, events: string, callback: Function): any; - stopListening(object?: any, events?: string, callback?: Function): any; + on(eventName: any, callback?: any, context?: any) + off(eventName?: string, callback?: (...args: any[]) => void, context?: any) + trigger(eventName: string, ...args: any[]) + bind(eventName: string, callback: (...args: any[]) => void, context?: any) + unbind(eventName?: string, callback?: (...args: any[]) => void, context?: any) + once(events: string, callback: (...args: any[]) => void, context?: any): any; + listenTo(object: any, events: string, callback: (...args: any[]) => void): any; + listenToOnce(object: any, events: string, callback: (...args: any[]) => void): any; + stopListening(object?: any, events?: string, callback?: (...args: any[]) => void): any; app: App; }