diff --git a/knockout-transformations/knockout-transformations-tests.ts b/knockout-transformations/knockout-transformations-tests.ts index 6b15b3ca01..5f132858c9 100644 --- a/knockout-transformations/knockout-transformations-tests.ts +++ b/knockout-transformations/knockout-transformations-tests.ts @@ -161,3 +161,46 @@ var indexedTexts: KnockoutObservable<{ [suffixOrPrefix: string]: string[] }> = t // z: ['baz'], // x: ['qux', 'quux'] // } + + +(() => { + var sourceItems: KnockoutObservableArray = ko.observableArray([1, 2, 3, 4, 5]); + var asString: KnockoutObservableArray; + + asString = sourceItems.map((x: number) => x.toString()); + + asString = sourceItems.map({ + mapping: (x: number) => x.toString(), + }); + + asString = sourceItems.map({ + mapping: (x: number) => x.toString(), + disposeItem: (x: string) => console.log('disposing map to', x), + }); + + asString = sourceItems.map({ + mappingWithDisposeCallback: (x: number) => ({ + mappedValue: x.toString(), + dispose: () => console.log('disposing map from', x), + }), + }); + + asString = sourceItems.map(x => x.toString()); + + asString = sourceItems.map({ + mapping: x => x.toString(), + }); + + asString = sourceItems.map({ + mapping: x => x.toString(), + disposeItem: x => console.log('disposing map to', x), + }); + + asString = sourceItems.map({ + mappingWithDisposeCallback: x => ({ + mappedValue: x.toString(), + dispose: () => console.log('disposing map from', x), + }), + }); + +}); diff --git a/knockout-transformations/knockout-transformations.d.ts b/knockout-transformations/knockout-transformations.d.ts index b599c7d699..3048e7a0f2 100644 --- a/knockout-transformations/knockout-transformations.d.ts +++ b/knockout-transformations/knockout-transformations.d.ts @@ -5,8 +5,27 @@ /// +declare module KnockoutTransformations { + interface Mapping { + (value: T): TResult; + } + interface MappingOption { + mapping: Mapping; + disposeItem?: (item: TResult) => void; + } + interface MappingWithDisposeCallbackOption { + mappingWithDisposeCallback: (value: T) => { + mappedValue: TResult; + dispose: () => void; + }; + } +} + interface KnockoutObservableArrayFunctions { - map(mapping: (value: T) => TResult): KnockoutObservableArray; + map(mapping: KnockoutTransformations.Mapping): KnockoutObservableArray; + map(mapping: KnockoutTransformations.MappingOption): KnockoutObservableArray; + map(mapping: KnockoutTransformations.MappingWithDisposeCallbackOption): KnockoutObservableArray; + filter(predicate: (value: T) => boolean): KnockoutObservableArray; sortBy(sorter: (value: T, descending: (sorter: any) => any) => any): KnockoutObservableArray; indexBy(indexer: (value: T) => string): KnockoutObservable<{ [index: string]: T[] }>;