One of the first things many developers would try and do is grab a library like lodash to use in their projects. To get the type information from lodash, we're going to use a tool called Typings, so npm install -g typings. Once that's done, I'll say typings install lodash. and then, --save to save that, My Project.
What that did is it created a typings.json of where it got that file from, the lodash typings, and then a typings directory that it downloaded typings into, and typings just being the index.d.ts. A d.ts is a definition file. If you scroll down in here, there's going to be a lot of stuff. You'll start finding different interfaces that represent lodash itself.
The first thing you'll notice is that we get duplicate identifier errors in the TypeScript compiler. That's because in our tsconfig, we said only exclude node modules. What's happening is it's loading both the browser version and the main version of my typings files. I want to exclude the typings/main, the definition file, and typings/main, the folder.
When I do that, in here, I'm going to force rerun the TypeScript compiler. You'll see that now all of the errors have gone away. Back in my main.ts file, I can import lodash. From lodash, instead of using this destructuring syntax, I'm going to say grab everything from lodash and name it Underscore.
When you grab everything and then name it Underscore, it's like referencing lodash itself by an underscore. I'm going to do a basic check with lodash now. I'll say console.log underscore .is array. It's one of the methods from lodash. I'll say new app get users. That should return an array of persons, so .is array should be true.
When I save here and I refresh in the browser, the error I'm going to get is that it can't find lodash. It's trying to load lodash from port 8080 on my local host because of the way that my SystemJS loader is set up.
Remember there is that distinction and that difference between TypeScript and what it's compiling down into, and whatever module loader you're using. In my case, I'm using SystemJS. You can use others because in the dist, when you look at main, all it's doing is same require lodash.
It's up to you to define what that means. For SystemJS, and this is just in a dev build, we'll set up a production build later. I'm going to say map. This is going to allow me to map lodash to where it can grab lodash from.
I'm going to hop over npmcdn again. Npmcdn/lodash will give you the version number. I'll reload that, just copy and paste that. I'm going to map lodash itself to the npmcdn version of lodash. When I hit Save and I refresh now, you'll see we'll get true.
When I check the Network tab, you'll see that it loaded lodash. When it made that request in main from that require, SystemJS went out and grabbed lodash. When it did this .is array check, it had lodash loaded already.