23
votes

I am trying to set up a TypeScript express/node application in Visual Studio Code following the Microsoft guide but changing it to use TypeScript however when it comes to installing the type definitions using typings I seem to have to install more packages than the guide.

I'm running the following pair of commands:

typings install node --ambient --save
typings install express --ambient --save

However attempting to build with just those packages gives the following type of error:

error TS2307: Cannot find module 'serve-static'.

For the following typings:

  • mime
  • express-serve-static-core
  • serve-static

I can resolve this by installing the required typings but it seems like something typings should do by itself.

I wanted to check if I was missing a fundamental step to automatically pull in dependencies or whether the guide was outdated?

In case it's relevant, my tsconfig.json:

{
    "compilerOptions": {
        "target": "es5",
        "module": "commonjs",
        "sourceMap": true,
        "outDir": "bin",
        "sourceRoot": "src"
    },
    "exclude": [
        "node_modules",
        "typings/browser.d.ts",
        "typings/browser"
    ]
}

My tsc is version 1.8.7 and I have typescript installed globally.

3
While it would be great if it pulled the ambient declarations today, it currently doesn't and it likely won't change. See this issue as well as this commentchrisbajorin
Just a side note that "ambient" is deprecated now: typings ERR! deprecated The "ambient" flag is deprecated. Please use "global" insteadMusa Haidari

3 Answers

31
votes

As of the release of TypeScript 2.0 last month, the recommended tool for installing typings is our trusty old friend npm instead of typings or tsd.

npm install @types/node --save

With npm, there's no need to worry about "global" or "ambient" installations anymore.

You also don't need to worry about adding <reference> tags to the top of your source files anymore; just drop the following property into your compilerOptions in tsconfig.json, and the TypeScript compiler will automatically find the npm typings you've installed:

"typeRoots": [ "node_modules/@types" ]

Here's a blog post that explains the change in some more detail: https://blogs.msdn.microsoft.com/typescript/2016/06/15/the-future-of-declaration-files/

8
votes

The tutorial I linked has now been updated to include the following commands:

typings install node --ambient
typings install express serve-static express-serve-static-core --ambient

See @cdbajorin 's comment for information about why dependencies are not automatically downloaded.

2
votes

to save everyone a headache, the magic command to get the typings for node is now:

typings install node --source env --global --save