knockout-es5
knockout-es5 copied to clipboard
Add to definitely typed?
Any chance we could get a d.ts file to add the tracking and stuff to the ko interface.
I have never created such a file, it will be cool if someone will make a PR. If I manage to find time, I will try to understand this topic.
Someone created one: https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/knockout.es5
I'm having problems using the knockout.es5 typing mentioned above.
I can't add an import statement because the typing doesn't appear to export anything. I.e typescript won't let me do this:
import knockoutes5 = require("knockout-es5");
because it says "knockout-es5" isn't a module.
Any ideas how to solve this?
I am not sure if it has been updated but I ended up editing the default one, here is how it looks:
// Type definitions for Knockout-ES5
// Project: https://github.com/SteveSanderson/knockout-es5
// Definitions by: Sebastián Galiano <https://github.com/sgaliano/>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/// <reference path="../knockout/knockout.d.ts" />
interface KnockoutStatic {
track(obj: any, propertyNames?: Array<string>): any;
defineProperty(obj: any, propertyName: string, evaluator: Function): any;
defineProperty(obj: any, propertyName: string, options: KnockoutDefinePropertyOptions): any;
getObservable(obj: any, propertyName: string): KnockoutObservable<any>;
valueHasMutated(obj: any, propertyName: string): void;
}
interface KnockoutDefinePropertyOptions {
get(): any;
set?(value: any): void;
}
interface Array<T> {
remove(item: T): T[];
removeAll(items: T[]): T[];
removeAll(): T[];
destroy(item: T): void;
destroyAll(items: T[]): void;
destroyAll(): void;
}
declare module "knockout-es5" {
export = ko;
}
Then I do
import * as ko from "knockout-es5"
Thanks @grofit
Is the import for knockout still needed when you do that - or can I just import es5?
I am currently doing this:
import knockout = require("knockout");
import * as ko from "knockout-es5"
Cheers!
the d.ts should not effect things, to my knowledge you do import * as ko from "knockout-es5"
and everything works as I think internally knockout-es5 includes knockout and proxies it, so you should be ok to just call the one include.
The ONLY quirk around this I found was libraries that self extend the ko instance like knockout-validation
will not work without knockout being explicitly included, so I am having to mix and match es-5 and normal knockout based upon if I need validation etc.
I will raise an issue on ko validation around this.
Just updated my definitions and having problems getting es5 working again now that KnockoutStatic
seems to have been removed in the latest knockout typings.
I have openedup a stack overflow here: https://stackoverflow.com/questions/47671487/knockout-es5-typings - would really appreciate a working example!