diff --git a/Definitions/knockout-2.2.d.ts b/Definitions/knockout-2.2.d.ts
index 78e0902c4..f5d77ecf9 100644
--- a/Definitions/knockout-2.2.d.ts
+++ b/Definitions/knockout-2.2.d.ts
@@ -1,273 +1,294 @@
-// Type definitions for Knockout 2.2
-// Project: http://knockoutjs.com
-// Definitions by: Boris Yankov
-// Definitions: https://github.com/borisyankov/DefinitelyTyped
-
-interface KnockoutSubscribableFunctions {
- extend(source);
- subscribe(callback: (newValue: any[]) => void, target?:any, topic?: string): KnockoutSubscription;
- notifySubscribers(valueToWrite, topic?: string);
- dispose(): void;
- peek(): any;
- valueHasMutated(): void;
-
- valueWillMutate(): void;
-}
-
-interface KnockoutComputedFunctions extends KnockoutSubscribableFunctions {
- getDependenciesCount(): number;
- hasWriteFunction(): bool;
-}
-
-interface KnockoutObservableFunctions extends KnockoutSubscribableFunctions {
-}
-
-interface KnockoutObservableArrayFunctions extends KnockoutObservableFunctions {
- // General Array functions
- indexOf(searchElement, fromIndex?: number): number;
- slice(start: number, end?: number): any[];
- splice(start: number): any[];
- splice(start: number, deleteCount: number, ...items: any[]): any[];
- pop();
- push(...items: any[]): void;
- shift();
- unshift(...items: any[]): number;
- reverse(): any[];
- sort(): void;
- sort(compareFunction): void;
-
- // Ko specific
- remove(item): any[];
- removeAll(items: any[]): any[];
- removeAll(): any[];
-
- destroy(item): void;
- destroyAll(items: any[]): void;
- destroyAll(): void;
-}
-
-interface KnockoutSubscribableStatic {
- fn: KnockoutSubscribableFunctions;
-
- new (): KnockoutSubscription;
-}
-
-interface KnockoutSubscription extends KnockoutSubscribableFunctions {
-}
-
-interface KnockoutComputedStatic {
- fn: KnockoutComputedFunctions;
-
- (): KnockoutComputed;
- (func: Function, context?: any): KnockoutComputed;
- (def: KnockoutComputedDefine): KnockoutComputed;
- (options?: any): KnockoutComputed;
-}
-
-interface KnockoutComputed extends KnockoutComputedFunctions {
- (): any;
- (value: any): void;
-}
-
-interface KnockoutObservableArrayStatic {
-
- fn: KnockoutObservableArrayFunctions;
-
- (): KnockoutObservableArray;
- (value: any[]): KnockoutObservableArray;
-}
-
-interface KnockoutObservableArray extends KnockoutObservableArrayFunctions {
- (): any[];
- (value: any[]): void;
-}
-
-interface KnockoutObservableStatic {
- fn: KnockoutObservableFunctions;
-
- (value: string): KnockoutObservableString;
- (value: Date): KnockoutObservableDate;
- (value: number): KnockoutObservableNumber;
- (value: bool): KnockoutObservableBool;
- (value?: any): KnockoutObservableAny;
-}
-
-interface KnockoutObservableBase extends KnockoutObservableFunctions {
-}
-
-interface KnockoutObservableAny extends KnockoutObservableBase {
-
- (): any;
- (value): void;
-}
-
-interface KnockoutObservableString extends KnockoutObservableBase {
- (): string;
- (value: string): void;
-}
-
-
-interface KnockoutObservableNumber extends KnockoutObservableBase {
- (): number;
- (value: number): void;
-}
-
-interface KnockoutObservableBool extends KnockoutObservableBase {
- (): bool;
- (value: bool): void;
-}
-
-interface KnockoutObservableDate extends KnockoutObservableBase {
- (): Date;
- (value: Date): void;
-}
-
-interface KnockoutComputedDefine {
- read(): any;
- write(any);
-}
-
-interface KnockoutBindingContext {
- $parent: any;
- $parents: any[];
- $root: any;
- $data: any;
- $index?: number;
- $parentContext?: KnockoutBindingContext;
-
- extend(any): any;
- createChildContext(any): any;
-}
-
-interface KnockoutBindingHandler {
- init?(element: any, valueAccessor: () => any, allBindingsAccessor: () => any, viewModel: any, bindingContext: KnockoutBindingContext): void;
- update?(element: any, valueAccessor: () => any, allBindingsAccessor: () => any, viewModel: any, bindingContext: KnockoutBindingContext): void;
- options?: any;
-}
-
-interface KnockoutBindingHandlers {
- // Controlling text and appearance
- visible: KnockoutBindingHandler;
- text: KnockoutBindingHandler;
- html: KnockoutBindingHandler;
- css: KnockoutBindingHandler;
- style: KnockoutBindingHandler;
- attr: KnockoutBindingHandler;
-
- // Control Flow
- foreach: KnockoutBindingHandler;
- if: KnockoutBindingHandler;
- ifnot: KnockoutBindingHandler;
- with: KnockoutBindingHandler;
-
- // Working with form fields
- click: KnockoutBindingHandler;
- event: KnockoutBindingHandler;
- submit: KnockoutBindingHandler;
- enable: KnockoutBindingHandler;
- disable: KnockoutBindingHandler;
- value: KnockoutBindingHandler;
- hasfocus: KnockoutBindingHandler;
- checked: KnockoutBindingHandler;
- options: KnockoutBindingHandler;
- selectedOptions: KnockoutBindingHandler;
- uniqueName: KnockoutBindingHandler;
-
- // Rendering templates
- template: KnockoutBindingHandler;
-}
-
-interface KnockoutMemoization {
- memoize(callback);
- unmemoize(memoId, callbackParams);
- unmemoizeDomNodeAndDescendants(domNode, extraCallbackParamsArray);
- parseMemoText(memoText);
-}
-
-interface KnockoutVirtualElements {
- allowedBindings;
- emptyNode;
- firstChild;
- insertAfter;
- nextSibling;
- prepend;
- setDomNodeChildren;
-}
-
-interface KnockoutExtenders {
- throttle(target: any, timeout: number): KnockoutComputed;
- notify(target: any, notifyWhen: string): any;
-}
-
-interface KnockoutUtils {
-
- fieldsIncludedWithJsonPost: any[];
-
- arrayForEach(array: any[], action: (any) => void ): void;
- arrayIndexOf(array: any[], item: any): number;
- arrayFirst(array: any[], predicate: (item) => bool, predicateOwner?: any): any;
- arrayRemoveItem(array: any[], itemToRemove: any): void;
- arrayGetDistinctValues(array: any[]): any[];
- arrayMap(array: any[], mapping: (item) => any): any[];
- arrayFilter(array: any[], predicate: (item) => bool): any[];
- arrayPushAll(array: any[], valuesToPush: any[]): any[];
-
- extend(target, source);
-
- emptyDomNode(domNode): void;
- moveCleanedNodesToContainerElement(nodes: any[]): HTMLElement;
- cloneNodes(nodesArray: any[], shouldCleanNodes: bool): any[];
- setDomNodeChildren(domNode: any, childNodes: any[]): void;
- replaceDomNodes(nodeToReplaceOrNodeArray: any, newNodesArray: any[]): void;
- setOptionNodeSelectionState(optionNode: any, isSelected: bool): void;
- stringTrim(str: string): string;
- stringTokenize(str: string, delimiter: string): string;
- stringStartsWith(str: string, startsWith: string): string;
- domNodeIsContainedBy(node: any, containedByNode: any): bool;
- domNodeIsAttachedToDocument(node: any): bool;
- tagNameLower(element: any): string;
- registerEventHandler(element: any, eventType: any, handler: Function): void;
- triggerEvent(element: any, eventType: any): void;
- unwrapObservable(value: any): any;
- toggleDomNodeCssClass(node: any, className: string, shouldHaveClass: bool): void;
- setTextContent(element: any, textContent: string): void;
- setElementName(element: any, name: string): void;
- ensureSelectElementIsRenderedCorrectly(selectElement);
- forceRefresh(node: any): void;
- ensureSelectElementIsRenderedCorrectly(selectElement: any): void;
- range(min: any, max: any): any;
- makeArray(arrayLikeObject: any): any[];
- getFormFields(form: any, fieldName: string): any[];
- parseJson(jsonString: string): any;
- stringifyJson(data: any, replacer: Function, space: string): string;
- postJson(urlOrForm: any, data: any, options: any): void;
-
- domNodeDisposal;
-}
-
-
-interface KnockoutStatic {
- utils: KnockoutUtils;
- memoization: KnockoutMemoization;
- bindingHandlers: KnockoutBindingHandlers;
- virtualElements: KnockoutVirtualElements;
- extenders: KnockoutExtenders;
-
- applyBindings(viewModel: any, rootNode?: any): void;
- applyBindingsToDescendants(viewModel: any, rootNode: any): void;
-
- subscribable: KnockoutSubscribableStatic;
- observable: KnockoutObservableStatic;
- computed: KnockoutComputedStatic;
- observableArray: KnockoutObservableArrayStatic;
-
- contextFor(node: any): any;
- isSubscribable(instance: any): bool;
- toJSON(viewModel: any, replacer?: Function, space?: any): string;
- toJS(viewModel: any): any;
- isObservable(instance: any): bool;
- dataFor(node: any): any;
- removeNode(node: Element);
-}
-
+// Type definitions for Knockout 2.2
+// Project: http://knockoutjs.com
+// Definitions by: Boris Yankov
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+interface KnockoutSubscribableFunctions {
+ extend(source);
+ dispose(): void;
+ peek(): any;
+ valueHasMutated(): void;
+
+ valueWillMutate(): void;
+}
+
+interface KnockoutComputedFunctions extends KnockoutSubscribableFunctions {
+ getDependenciesCount(): number;
+ hasWriteFunction(): bool;
+}
+
+interface KnockoutObservableFunctions extends KnockoutSubscribableFunctions {
+}
+
+interface KnockoutObservableArrayFunctions extends KnockoutObservableFunctions {
+ // General Array functions
+ indexOf(searchElement, fromIndex?: number): number;
+ slice(start: number, end?: number): any[];
+ splice(start: number): any[];
+ splice(start: number, deleteCount: number, ...items: any[]): any[];
+ pop();
+ push(...items: any[]): void;
+ shift();
+ unshift(...items: any[]): number;
+ reverse(): any[];
+ sort(): void;
+ sort(compareFunction): void;
+
+ // Ko specific
+ remove(item): any[];
+ removeAll(items: any[]): any[];
+ removeAll(): any[];
+
+ destroy(item): void;
+ destroyAll(items: any[]): void;
+ destroyAll(): void;
+}
+
+interface KnockoutSubscribableStatic {
+ fn: KnockoutSubscribableFunctions;
+
+ new (): KnockoutSubscription;
+}
+
+interface KnockoutSubscription extends KnockoutSubscribableFunctions {
+ subscribe(callback: (newValue: any) => void, target?:any, topic?: string): KnockoutSubscription;
+ notifySubscribers(valueToWrite, topic?: string);
+}
+
+interface KnockoutComputedStatic {
+ fn: KnockoutComputedFunctions;
+
+ (): KnockoutComputed;
+ (func: Function, context?: any): KnockoutComputed;
+ (def: KnockoutComputedDefine): KnockoutComputed;
+ (options?: any): KnockoutComputed;
+}
+
+interface KnockoutComputed extends KnockoutComputedFunctions {
+ (): any;
+ (value: any): void;
+
+ subscribe(callback: (newValue: any) => void, target?:any, topic?: string): KnockoutSubscription;
+ notifySubscribers(valueToWrite, topic?: string);
+}
+
+interface KnockoutObservableArrayStatic {
+
+ fn: KnockoutObservableArrayFunctions;
+
+ (): KnockoutObservableArray;
+ (value: any[]): KnockoutObservableArray;
+}
+
+interface KnockoutObservableArray extends KnockoutObservableArrayFunctions {
+ (): any[];
+ (value: any[]): void;
+
+ subscribe(callback: (newValue: any[]) => void, target?:any, topic?: string): KnockoutSubscription;
+ notifySubscribers(valueToWrite: any[], topic?: string);
+}
+
+interface KnockoutObservableStatic {
+ fn: KnockoutObservableFunctions;
+
+ (value: string): KnockoutObservableString;
+ (value: Date): KnockoutObservableDate;
+ (value: number): KnockoutObservableNumber;
+ (value: bool): KnockoutObservableBool;
+ (value?: any): KnockoutObservableAny;
+}
+
+interface KnockoutObservableBase extends KnockoutObservableFunctions {
+}
+
+interface KnockoutObservableAny extends KnockoutObservableBase {
+
+ (): any;
+ (value): void;
+
+ subscribe(callback: (newValue: any) => void, target?:any, topic?: string): KnockoutSubscription;
+ notifySubscribers(valueToWrite, topic?: string);
+}
+
+interface KnockoutObservableString extends KnockoutObservableBase {
+ (): string;
+ (value: string): void;
+
+ subscribe(callback: (newValue: string) => void, target?:any, topic?: string): KnockoutSubscription;
+ notifySubscribers(valueToWrite: string, topic?: string);
+}
+
+
+interface KnockoutObservableNumber extends KnockoutObservableBase {
+ (): number;
+ (value: number): void;
+
+ subscribe(callback: (newValue: number) => void, target?:any, topic?: string): KnockoutSubscription;
+ notifySubscribers(valueToWrite: number, topic?: string);
+}
+
+interface KnockoutObservableBool extends KnockoutObservableBase {
+ (): bool;
+ (value: bool): void;
+
+ subscribe(callback: (newValue: bool) => void, target?:any, topic?: string): KnockoutSubscription;
+ notifySubscribers(valueToWrite: bool, topic?: string);
+}
+
+interface KnockoutObservableDate extends KnockoutObservableBase {
+ (): Date;
+ (value: Date): void;
+
+ subscribe(callback: (newValue: Date) => void, target?:any, topic?: string): KnockoutSubscription;
+ notifySubscribers(valueToWrite: Date, topic?: string);
+}
+
+interface KnockoutComputedDefine {
+ read(): any;
+ write(any);
+}
+
+interface KnockoutBindingContext {
+ $parent: any;
+ $parents: any[];
+ $root: any;
+ $data: any;
+ $index?: number;
+ $parentContext?: KnockoutBindingContext;
+
+ extend(any): any;
+ createChildContext(any): any;
+}
+
+interface KnockoutBindingHandler {
+ init?(element: any, valueAccessor: () => any, allBindingsAccessor: () => any, viewModel: any, bindingContext: KnockoutBindingContext): void;
+ update?(element: any, valueAccessor: () => any, allBindingsAccessor: () => any, viewModel: any, bindingContext: KnockoutBindingContext): void;
+ options?: any;
+}
+
+interface KnockoutBindingHandlers {
+ // Controlling text and appearance
+ visible: KnockoutBindingHandler;
+ text: KnockoutBindingHandler;
+ html: KnockoutBindingHandler;
+ css: KnockoutBindingHandler;
+ style: KnockoutBindingHandler;
+ attr: KnockoutBindingHandler;
+
+ // Control Flow
+ foreach: KnockoutBindingHandler;
+ if: KnockoutBindingHandler;
+ ifnot: KnockoutBindingHandler;
+ with: KnockoutBindingHandler;
+
+ // Working with form fields
+ click: KnockoutBindingHandler;
+ event: KnockoutBindingHandler;
+ submit: KnockoutBindingHandler;
+ enable: KnockoutBindingHandler;
+ disable: KnockoutBindingHandler;
+ value: KnockoutBindingHandler;
+ hasfocus: KnockoutBindingHandler;
+ checked: KnockoutBindingHandler;
+ options: KnockoutBindingHandler;
+ selectedOptions: KnockoutBindingHandler;
+ uniqueName: KnockoutBindingHandler;
+
+ // Rendering templates
+ template: KnockoutBindingHandler;
+}
+
+interface KnockoutMemoization {
+ memoize(callback);
+ unmemoize(memoId, callbackParams);
+ unmemoizeDomNodeAndDescendants(domNode, extraCallbackParamsArray);
+ parseMemoText(memoText);
+}
+
+interface KnockoutVirtualElements {
+ allowedBindings;
+ emptyNode;
+ firstChild;
+ insertAfter;
+ nextSibling;
+ prepend;
+ setDomNodeChildren;
+}
+
+interface KnockoutExtenders {
+ throttle(target: any, timeout: number): KnockoutComputed;
+ notify(target: any, notifyWhen: string): any;
+}
+
+interface KnockoutUtils {
+
+ fieldsIncludedWithJsonPost: any[];
+
+ arrayForEach(array: any[], action: (any) => void ): void;
+ arrayIndexOf(array: any[], item: any): number;
+ arrayFirst(array: any[], predicate: (item) => bool, predicateOwner?: any): any;
+ arrayRemoveItem(array: any[], itemToRemove: any): void;
+ arrayGetDistinctValues(array: any[]): any[];
+ arrayMap(array: any[], mapping: (item) => any): any[];
+ arrayFilter(array: any[], predicate: (item) => bool): any[];
+ arrayPushAll(array: any[], valuesToPush: any[]): any[];
+
+ extend(target, source);
+
+ emptyDomNode(domNode): void;
+ moveCleanedNodesToContainerElement(nodes: any[]): HTMLElement;
+ cloneNodes(nodesArray: any[], shouldCleanNodes: bool): any[];
+ setDomNodeChildren(domNode: any, childNodes: any[]): void;
+ replaceDomNodes(nodeToReplaceOrNodeArray: any, newNodesArray: any[]): void;
+ setOptionNodeSelectionState(optionNode: any, isSelected: bool): void;
+ stringTrim(str: string): string;
+ stringTokenize(str: string, delimiter: string): string;
+ stringStartsWith(str: string, startsWith: string): string;
+ domNodeIsContainedBy(node: any, containedByNode: any): bool;
+ domNodeIsAttachedToDocument(node: any): bool;
+ tagNameLower(element: any): string;
+ registerEventHandler(element: any, eventType: any, handler: Function): void;
+ triggerEvent(element: any, eventType: any): void;
+ unwrapObservable(value: any): any;
+ toggleDomNodeCssClass(node: any, className: string, shouldHaveClass: bool): void;
+ setTextContent(element: any, textContent: string): void;
+ setElementName(element: any, name: string): void;
+ ensureSelectElementIsRenderedCorrectly(selectElement);
+ forceRefresh(node: any): void;
+ ensureSelectElementIsRenderedCorrectly(selectElement: any): void;
+ range(min: any, max: any): any;
+ makeArray(arrayLikeObject: any): any[];
+ getFormFields(form: any, fieldName: string): any[];
+ parseJson(jsonString: string): any;
+ stringifyJson(data: any, replacer: Function, space: string): string;
+ postJson(urlOrForm: any, data: any, options: any): void;
+
+ domNodeDisposal;
+}
+
+
+interface KnockoutStatic {
+ utils: KnockoutUtils;
+ memoization: KnockoutMemoization;
+ bindingHandlers: KnockoutBindingHandlers;
+ virtualElements: KnockoutVirtualElements;
+ extenders: KnockoutExtenders;
+
+ applyBindings(viewModel: any, rootNode?: any): void;
+ applyBindingsToDescendants(viewModel: any, rootNode: any): void;
+
+ subscribable: KnockoutSubscribableStatic;
+ observable: KnockoutObservableStatic;
+ computed: KnockoutComputedStatic;
+ observableArray: KnockoutObservableArrayStatic;
+
+ contextFor(node: any): any;
+ isSubscribable(instance: any): bool;
+ toJSON(viewModel: any, replacer?: Function, space?: any): string;
+ toJS(viewModel: any): any;
+ isObservable(instance: any): bool;
+ dataFor(node: any): any;
+ removeNode(node: Element);
+}
+
declare var ko: KnockoutStatic;
\ No newline at end of file
diff --git a/Tests/knockout-tests.ts b/Tests/knockout-tests.ts
index 24fe24705..f5be6de5b 100644
--- a/Tests/knockout-tests.ts
+++ b/Tests/knockout-tests.ts
@@ -89,6 +89,24 @@ function test_computed() {
ko.applyBindings(new MyViewModel());
}
+class GetterViewModel {
+ private _selectedRange: KnockoutObservableAny;
+
+ constructor() {
+ this._selectedRange = ko.observable();
+ }
+
+ public get range() : KnockoutObservableAny {
+ return this._selectedRange;
+ }
+}
+
+function testGetter() {
+ var model = new GetterViewModel();
+
+ model.range.subscribe((range: number) => {
+ });
+}
function test_observableArrays() {
var myObservableArray = ko.observableArray();