Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TypeScript getting error TS2304: cannot find name ' require'

I am trying to get my first TypeScript and DefinitelyTyped Node.js application up and running, and running into some errors.

I am getting the error "TS2304: Cannot find name 'require' " when I attempt to transpile a simple TypeScript Node.js page. I have read through several other occurrences of this error on Stack Overflow, and I do not think I have similar issues. I am running at the shell prompt the command:

tsc movie.server.model.ts. 

The contents of this file are:

'use strict';  /// <reference path="typings/tsd.d.ts" />  /*    movie.server.model.ts - definition of movie schema */  var mongoose = require('mongoose'), Schema = mongoose.Schema;  var foo = 'test'; 

The error is thrown on the var mongoose=require('mongoose') line.

The contents of the typings/tsd.d.ts file are:

/// <reference path="node/node.d.ts" /> /// <reference path="requirejs/require.d.ts" /> 

The .d.ts file references were placed in the appropriate folders and added to typings/tsd.d.ts by the commands:

tsd install node --save tsd install require --save 

The produced .js file seems to work fine, so I could ignore the error. But I would appreciate knowing why this error occurs and what I am doing wrong.

like image 350
JerryKur Avatar asked Jul 02 '15 00:07

JerryKur


People also ask

Do you need to install type definitions for node?

The Node runtime does not ship with its own type definitions, so we need to import those types separately. Where can we find them? They are also in npm but need to be installed separately.

Can not find module path?

To solve the "Cannot find module path or its corresponding type declarations" error, install the types for node by running the command npm i -D @types/node . You can then import path with the following line of code import * as path from 'path' .

What is require in angular?

AngularJS ng-required DirectiveThe ng-required directive sets the required attribute of a form field (input or textarea). The form field will be required if the expression inside the ng-required attribute returns true. The ng-required directive is necessary to be able to shift the value between true and false .


1 Answers

Quick and Dirty

If you just have one file using require, or you're doing this for demo purposes you can define require at the top of your TypeScript file.

declare var require: any 

TypeScript 2.x

If you are using TypeScript 2.x you no longer need to have Typings or Definitely Typed installed. Simply install the following package.

npm install @types/node --save-dev 

The Future of Declaration Files (6/15/2016)

Tools like Typings and tsd will continue to work, and we’ll be working alongside those communities to ensure a smooth transition.

Verify or Edit your src/tsconfig.app.json so that it contains the following:

... "types": [ "node" ], "typeRoots": [ "../node_modules/@types" ] ... 

Make sure is the file in the src folder and no the one on the root app folder.

By default, any package under @types is already included in your build unless you've specified either of these options. Read more

TypeScript 1.x

Using typings (DefinitelyTyped's replacement) you can specify a definition directly from a GitHub repository.

Install typings

npm install typings -g --save-dev 

Install the requireJS type definition from DefinitelyType's repo

typings install dt~node --save --global 

Webpack

If you are using Webpack as your build tool you can include the Webpack types.

npm install --save-dev @types/webpack-env 

Update your tsconfig.json with the following under compilerOptions:

"types": [       "webpack-env"     ] 

This allows you to do require.ensure and other Webpack specific functions.

Angular CLI

With CLI you can follow the Webpack step above and add the "types" block to your tsconfig.app.json.

Alternatively, you could use the preinstalled node types. Keep in mind this will include additional types to your client-side code that are not really available.

"compilerOptions": {     // other options     "types": [       "node"     ]   } 
like image 164
cgatian Avatar answered Oct 17 '22 03:10

cgatian