diff --git a/Backbone-Associations/backbone-associations-tests.ts b/Backbone-Associations/backbone-associations-tests.ts
new file mode 100644
index 000000000..d25ddf17e
--- /dev/null
+++ b/Backbone-Associations/backbone-associations-tests.ts
@@ -0,0 +1,79 @@
+///
+///
+
+// borrowed from the Backbone.Associations tutorials
+// separated out into modules to avoid namespace clashes
+module Backbone.Associations.Tests {
+ module OneToOne {
+ class EmployeeWithManager extends Backbone.AssociatedModel {
+ constructor(options?) {
+ this.relations = [
+ {
+ type: Backbone.One, //nature of the relationship
+ key: 'manager', // attribute of Employee
+ relatedModel: 'Employee' //AssociatedModel for attribute key
+ }
+ ];
+ super(options);
+ }
+
+ defaults() {
+ return {
+ age: 0,
+ fname: "",
+ lname: "",
+ manager: null
+ };
+ }
+ }
+ }
+
+ module OneToMany {
+ class Location extends Backbone.AssociatedModel {
+ defaults() {
+ return {
+ add1: "",
+ add2: null,
+ zip: "",
+ state: ""
+ };
+ }
+ }
+
+ class Locations extends Backbone.Collection {
+ comparator(c: Backbone.Model) {
+ return c.get("Number");
+ }
+ }
+
+ class Project extends Backbone.AssociatedModel {
+ constructor(options?) {
+ this.relations = [
+ {
+ type: Backbone.Many, //nature of the relation
+ key: 'locations', //attribute of Project
+ collectionType: Locations, //Collection to be used.
+ relatedModel: Location //Optional
+ }
+ ];
+ super(options);
+ }
+
+ defaults() {
+ return {
+ name: "",
+ number: 0,
+ locations: []
+ }
+ }
+ }
+
+ function reverseAssociationTest() {
+ var local = new Location({ state: "Hertfordshire" });
+ var project = new Project({ name: "The Old Pond Project" });
+ local.set("oddRelationTo", project);
+ var parents = project.parents;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/Backbone-Associations/backbone-associations-tests.ts.tscparams b/Backbone-Associations/backbone-associations-tests.ts.tscparams
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/Backbone-Associations/backbone-associations-tests.ts.tscparams
@@ -0,0 +1 @@
+
diff --git a/Backbone-Associations/backbone-associations.d.ts b/Backbone-Associations/backbone-associations.d.ts
new file mode 100644
index 000000000..2a9ecf779
--- /dev/null
+++ b/Backbone-Associations/backbone-associations.d.ts
@@ -0,0 +1,75 @@
+// Type definitions for Backbone-associations 0.6.4
+// Project: https://github.com/dhruvaray/backbone-associations/
+// Definitions by: Craig Brett
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+
+declare module Backbone {
+ export module Associations {
+ /** Defines a 1:Many relationship type */
+ export var Many: string;
+ /** Defines a 1:1 relationship type */
+ export var One: string;
+ /** Defines a special relationship to itself */
+ export var Self: string;
+
+ // these seem to be used internally, but can't see a reason not to include them just in case
+ export var SEPARATOR: string;
+ export function getSeparator(): any;
+ export function setSeparator(value: any): void;
+ export var EVENTS_BUBBLE: boolean;
+ export var EVENTS_WILDCARD: boolean;
+ export var EVENTS_NC: boolean;
+
+ interface IRelation {
+ /** The type of model for this relationship */
+ relatedModel: string|typeof Backbone.Associations.AssociatedModel;
+ /** The key for this relationship on this model */
+ key: string;
+ // meh, no string enums in TS. Just have to trust the user not to be a fool
+ /** The cardinality of this relationship. */
+ type: string;
+ /** Determines the type of collection used. If used, the relatedModel property is ignored */
+ collectionType?: typeof Backbone.Collection|string;
+ /** If set to true, then the attribute will not be serialized in toJSON() calls. Defaults to false */
+ isTransient?: boolean;
+ /** Specify remoteKey to serialize the key to a different key name in toJSON() calls. Useful in ROR nested-attributes like scenarios. */
+ remoteKey?: string;
+ /** the attributes to serialize when calling toJSON */
+ serialize?: string[];
+ /** A transformation function to convert the value before it is assigned to the key on the relatedModel */
+ map?: (...args: any[]) => any;
+ }
+
+ /** A Backbone model with special provision for handling relations to other models */
+ export class AssociatedModel extends Backbone.Model {
+ /** Relations with their associated model */
+ relations: IRelation[];
+ _proxyCalls: any;
+ /** Reverse association lookup for objects that contain this object */
+ parents: any[];
+ /** Cleans up any parent relations on other AssociatedModels */
+ cleanup(): void;
+ }
+ }
+ // copies of properties also put onto the Backbone scope
+ /** Defines a 1:Many relationship type */
+ export var Many: string;
+ /** Defines a 1:1 relationship type */
+ export var One: string;
+ /** Defines a special relationship to itself */
+ export var Self: string;
+
+ // I'm sure this should be doable with imports or type aliases, but doesn't seem to work
+ /** A Backbone model with special provision for handling relations to other models */
+ export class AssociatedModel extends Backbone.Model {
+ /** Relations with their associated model */
+ relations: Associations.IRelation[];
+ _proxyCalls: any;
+ /** Reverse association lookup for objects that contain this object */
+ parents: any[];
+ /** Cleans up any parent relations on other AssociatedModels */
+ cleanup(): void;
+ }
+}
\ No newline at end of file
diff --git a/Backbone-Associations/backbone-associations.d.ts.tscparams b/Backbone-Associations/backbone-associations.d.ts.tscparams
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/Backbone-Associations/backbone-associations.d.ts.tscparams
@@ -0,0 +1 @@
+