diff --git a/types/ember-data/index.d.ts b/types/ember-data/index.d.ts index 7b78770489..9eec5ed467 100644 --- a/types/ember-data/index.d.ts +++ b/types/ember-data/index.d.ts @@ -23,6 +23,9 @@ declare module 'ember-data' { type AttributesFor = keyof Model; // TODO: filter to attr properties only (TS 2.8) type RelationshipsFor = keyof Model; // TODO: filter to hasMany/belongsTo properties only (TS 2.8) + export interface ChangedAttributes { + [key: string]: [any, any] | undefined; + } interface AttributeMeta { type: keyof TransformRegistry; options: object; @@ -500,7 +503,7 @@ declare module 'ember-data' { * Returns an object, whose keys are changed properties, and value is * an [oldProp, newProp] array. */ - changedAttributes(): {}; + changedAttributes(): ChangedAttributes; /** * If the model `hasDirtyAttributes` this function will discard any unsaved * changes. If the model `isNew` it will be removed from the store. diff --git a/types/ember-data/test/model.ts b/types/ember-data/test/model.ts index a18167dbee..63bda2588e 100644 --- a/types/ember-data/test/model.ts +++ b/types/ember-data/test/model.ts @@ -1,5 +1,5 @@ import Ember from 'ember'; -import DS from 'ember-data'; +import DS, { ChangedAttributes } from 'ember-data'; import { assertType } from "./lib/assert"; const Person = DS.Model.extend({ @@ -30,3 +30,7 @@ assertType(user.get('createdAt')); user.serialize(); user.serialize({ includeId: true }); +user.serialize({ includeId: true }); + +const attributes = user.changedAttributes(); +assertType(attributes);