diff --git a/knockout.projections/knockout.projections-tests.ts b/knockout.projections/knockout.projections-tests.ts new file mode 100644 index 000000000..3d479e7ac --- /dev/null +++ b/knockout.projections/knockout.projections-tests.ts @@ -0,0 +1,28 @@ +// Tests for knockout.projections.d.ts + +/// +/// + +// Test map +var sourceItems = ko.observableArray([1, 2, 3, 4, 5]); +var squares = sourceItems.map(function (x) { return x * x; }); +var squaresAsStrings = sourceItems.map(function (x) { return (x * x).toString(); }); + +sourceItems.push(6); +// 'squares' has automatically updated and now contains [1, 4, 9, 16, 25, 36] +// 'squaresAsStrings' has automatically updated and now contains ['1', '4', '9', '16', '25', '36'] + +sourceItems.reverse(); +// 'squares' now contains [36, 25, 16, 9, 4, 1] +// 'squaresAsStrings' now contains ['36', '25', '16', '9', '4', '1'] + +// Test Filtering + +var evenSquares = squares.filter(function (x) { return x % 2 === 0; }); +// evenSquares is now an observable containing [36, 16, 4] + +sourceItems.push(9); +// This has no effect on evenSquares, because 9*9=81 is odd + +sourceItems.push(10); +// evenSquares now contains [36, 16, 4, 100] diff --git a/knockout.projections/knockout.projections.d.ts b/knockout.projections/knockout.projections.d.ts new file mode 100644 index 000000000..5e85308a9 --- /dev/null +++ b/knockout.projections/knockout.projections.d.ts @@ -0,0 +1,11 @@ +// Type definitions for knockout-projections 1.0.0 +// Project: https://github.com/stevesanderson/knockout-projections +// Definitions by: John Reilly + +/// + +interface KnockoutObservableArrayFunctions { + + map(mapping: (value: T) => TResult): KnockoutObservableArray; + filter(predicate: (value: T) => boolean): KnockoutObservableArray; +}