TypeScript Version: nightly (2.0.0-dev.20160706)
Code
// Before compiling: npm install @types/node
// Compile options: { "lib": ["es6"], "types": ["node"] }
process.cwd(); // OK
console.log('testing'); // ERROR: Cannot find name 'console'
Expected behavior:
Compiles without errors
Actual behavior:
console
is not defined
More Info:
node.d.ts
does not contain a definition for the global console
instance or for the Console
class. References to console
are resolved against the definitions from lib.dom.d.ts
. But now with the --lib
option, Node projects can opt out of the ambient DOM typings. That brings up the problem that console
is not defined.
It's not as simple as just copying the ambient console
and Console
definitions from lib.dom.d.ts
into node.d.ts
, because in browsers the Console
constructor is globally available but in Node it is not. 'Hiding' Console
under the NodeJS
namepace in node.d.ts
wont work either because then projects that _don't_ use the --lib
option will get conflicting DOM and Node definitions and will see the error TS2403: Subsequent variable declarations must have the same type. Variable 'console' must be of type 'Console', but here has type 'Console'.
I'm testing out changes to node.d.ts
that will work both with and without --lib
, and will submit a PR to DefinitelyTyped if I can get it working.
Looks like a definition bug in nose.d.ts
How to resolve this problem?
@frogcjn if you get your node typings using npm install @types/node
, you'll have the updated node.d.ts
that includes the Console
definitions.
thanks @yortus
This seems to have caused this bug:
https://github.com/Microsoft/TypeScript/issues/13204
tsconfig , lib
property add "dom"
thanks @gatspy
thanks @gatspy ,it works!
@gatspy thanks
Most helpful comment
tsconfig ,
lib
property add "dom"