From 697223d3e63621b69b2f0db894335f2d0758bf03 Mon Sep 17 00:00:00 2001 From: Thomas Michon Date: Mon, 30 Mar 2015 19:27:44 -0700 Subject: [PATCH] Make map and filter return type with a dispose method Defined a KnockoutMappedObservableArray type which extends KnockoutSubscription, providing a dispose() method since the mapped arrays require disposal for proper cleanup. --- knockout.projections/knockout.projections-tests.ts | 8 ++++++++ knockout.projections/knockout.projections.d.ts | 11 +++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/knockout.projections/knockout.projections-tests.ts b/knockout.projections/knockout.projections-tests.ts index d8d6c8dcd..138d36946 100644 --- a/knockout.projections/knockout.projections-tests.ts +++ b/knockout.projections/knockout.projections-tests.ts @@ -54,3 +54,11 @@ var complexItems2 = sourceItems.map({ }; } }); + +// Test disposal + +evenSquares.dispose(); + +complexItems.dispose(); + +complexItems2.dispose(); diff --git a/knockout.projections/knockout.projections.d.ts b/knockout.projections/knockout.projections.d.ts index a9ff8b5f3..e1443478a 100644 --- a/knockout.projections/knockout.projections.d.ts +++ b/knockout.projections/knockout.projections.d.ts @@ -5,18 +5,21 @@ /// +interface KnockoutMappedObservableArray extends KnockoutObservableArray, KnockoutSubscription { +} + interface KnockoutObservableArrayFunctions { map(mappingOptions: { mappingWithDisposeCallback: (value: T) => { mappedValue: TResult; dispose: () => void; }; - }): KnockoutObservableArray; + }): KnockoutMappedObservableArray; map(mappingOptions: { mapping: (value: T) => TResult; disposeItem?: (mappedItem: TResult) => void; - }): KnockoutObservableArray; - map(mappingOptions: (value: T) => TResult): KnockoutObservableArray; + }): KnockoutMappedObservableArray; + map(mappingOptions: (value: T) => TResult): KnockoutMappedObservableArray; - filter(predicate: (value: T) => boolean): KnockoutObservableArray; + filter(predicate: (value: T) => boolean): KnockoutMappedObservableArray; }