Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add to definitely typed? #42

Open
grofit opened this issue Aug 9, 2015 · 7 comments
Open

Add to definitely typed? #42

grofit opened this issue Aug 9, 2015 · 7 comments

Comments

@grofit
Copy link

grofit commented Aug 9, 2015

Any chance we could get a d.ts file to add the tracking and stuff to the ko interface.

@archangel-irk
Copy link
Collaborator

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.

@aligneddev
Copy link

@dazinator
Copy link

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?

@grofit
Copy link
Author

grofit commented Jan 14, 2016

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"

@dazinator
Copy link

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!

@grofit
Copy link
Author

grofit commented Jan 20, 2016

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.

@dazinator
Copy link

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!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants