diff --git a/types/knockout/index.d.ts b/types/knockout/index.d.ts index 6773ec8c23..fd788fbc72 100644 --- a/types/knockout/index.d.ts +++ b/types/knockout/index.d.ts @@ -409,10 +409,6 @@ interface KnockoutTasks { } ///////////////////////////////// -type KnockoutObservableType = { - [P in keyof T]: KnockoutObservable; -}; - interface KnockoutStatic { utils: KnockoutUtils; memoization: KnockoutMemoization; @@ -443,12 +439,18 @@ interface KnockoutStatic { contextFor(node: any): any; isSubscribable(instance: any): instance is KnockoutSubscribable; toJSON(viewModel: any, replacer?: Function, space?: any): string; - toJS(viewModel: KnockoutObservableArray|KnockoutObservableType[]|KnockoutObservableArray>|T[]): T[]; - toJS(viewModel: KnockoutObservable|KnockoutObservableType|KnockoutObservable>): T; - toJS(viewModel: T): T; - isObservable(instance: KnockoutObservable|T): instance is KnockoutObservable; - isWriteableObservable(instance: KnockoutObservable|T): instance is KnockoutObservable; - isComputed(instance: KnockoutObservable|T): instance is KnockoutComputed; + + toJS(viewModel: any): any; + + isObservable(instance: any): instance is KnockoutObservable; + isObservable(instance: KnockoutObservable): instance is KnockoutObservable; + + isWriteableObservable(instance: any): instance is KnockoutObservable; + isWriteableObservable(instance: KnockoutObservable): instance is KnockoutObservable; + + isComputed(instance: any): instance is KnockoutComputed; + isComputed(instance: KnockoutObservable | T): instance is KnockoutComputed; + dataFor(node: any): any; removeNode(node: Node): void; cleanNode(node: Node): Node; diff --git a/types/knockout/test/index.ts b/types/knockout/test/index.ts index 36db7657ed..bc62702e0d 100644 --- a/types/knockout/test/index.ts +++ b/types/knockout/test/index.ts @@ -99,6 +99,19 @@ class GetterViewModel { public range: KnockoutObservable; } +function testToJs() { + var objKo = { + prop: ko.observable("prop"), + subKo: ko.observable({ + prop: ko.observable("prop") + }) + }; + + var objJs = ko.toJS(objKo); + objJs.prop; // $ExpectType any + objJs.subKo.prop; // $ExpectType any +} + function testGetter() { var model = new GetterViewModel();