4 ms·
There are still issues with type definitions for third party libraries. I love TypeScript and would love to work on it full time, but it's painful when you need
by seivan 11y ago
There are still issues with type definitions for third party libraries. I love TypeScript and would love to work on it full time, but it's painful when you need to use a dozen third party code. Unless this has been solved recently, I remembered tds files weren't updated regularly.
- nothrabannosir 11y agoThis myth really needs to die. Sorry for the harsh language, it's the TS team's fault for not taking this ongoing PR blunder seriously. You can (and always could) use almost any 3rd party lib with literally one line of code: var somelib: any; Done. No need to ever touch a .d.ts file. Sure, no type safety on the lib. But isn't that where we started, anyway? This should be put on a giant banner on the TS homepage.
- seivan 11y agoI'm not bothered by silly things like tone or harsh language, especially for such amazing news. I've actually written my fair share during the summer and I never knew about this. Thank you! How well would this work with an editor and typescript plugins? Say the amazing typescript-atom, I would guess the editor would crap its pants, no?
- carussell 11y agoWhy not use VSCode instead of Atom? It's (relatively) performant, it has first class support for TypeScript, and if you ever want to hack on it, it's free/open source software (MIT) and written in TypeScript itself.
- DCoder 11y agoA better way would be to do like Arnavion said, for really global libraries you should create a .d.ts file and put this line in it: declare var somelib: any; Done. Now the compiler and everything else will know that there's a global variable called `somelib` that does not have a specific type, and no matter how you use that variable, it's ok, you know what you're doing.
- nothrabannosir 11y agoNo problem. As others mentioned; declare var is the way to go (my TS is getting rusty, apparently :) ). Editors have no problem with it. They will simply see it as an "any" var. Completely compatible. I wrote quite a bit of TS and this was how I used most obscure libraries. I can't be arsed to keep those stupid .d.ts files up to date and I trust the API docs. It's my own code I wanted to vet. Works like a charm. Judicious use of declare var any, and ignoring compiler errors, is what really makes TS reality-compatible.
- Arnavion 11y agoI would put `declare` in front of that to avoid generating an unused variable. And for required modules, you'd need to shim require in similar fashion and use var instead of import. declare function require(module: string): any; var somelib = require("somelib");
- WorldMaker 11y agoOr you can use import and the simple pattern of: declare module "somelib" { var somelib: any export = somelib }
- spion 11y agoGood point. Another option for libraries you use less heavily is to only write definitions for the parts of the library you actually use. You're not using the entire options parameter or https://github.com/flot/flot/blob/master/API.md https://github.com/flot/flot/blob/master/API.md ? Don't declare it - only add the properties you do use. You're only using 3 methods from 1 class in aws-sdk ? Only declare that 1 class and 3 methods in your aws-sdk.d.ts