TypeScript出現錯誤TS2304:找不到名稱「 require」

我正在嘗試啓動並運行個人第一個TypeScript和DefinitelyTyped Node.js應用程序,而且遇到一些錯誤。 html

嘗試轉換簡單的TypeScript Node.js頁面時,出現錯誤「 TS2304:找不到名稱'require'」。 我已經閱讀了Stack Overflow上此錯誤的其餘幾種狀況,但我認爲我沒有相似的問題。 我在shell提示符下運行命令: node

tsc movie.server.model.ts.

該文件的內容是: webpack

'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';

錯誤在var mongoose=require('mongoose')行上引起。 git

Types / tsd.d.ts文件的內容是: github

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

.d.ts文件引用放置在適當的文件夾中,並經過如下命令添加到Types / tsd.d.ts中: web

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

產生的.js文件彷佛工做正常,所以我能夠忽略該錯誤。 可是,我很高興知道爲何會發生此錯誤以及我在作什麼錯。 typescript


#1樓

您能夠 shell

declare var require: any

或者,要得到更全面的支持,請使用DefinitelyTyped的require.d.ts npm

另外,您能夠嘗試如下方法,而不是var mongoose = require('mongoose') json

import mongoose from 'mongoose' // or
import mongoose = require('mongoose')

#2樓

代替:

'use strict';

/// <reference path="typings/tsd.d.ts" />

嘗試:

/// <reference path="typings/tsd.d.ts" />

'use strict';

即先參考路徑。


#3樓

我發現解決方案是使用TSD命令:

tsd install node --save

它將添加/更新typings/tsd.d.ts文件,而且該文件包含節點應用程序所需的全部類型定義。

在文件的頂部,我像這樣對tsd.d.ts了引用:

/// <reference path="../typings/tsd.d.ts" />

從2016年1月起,需求定義以下:

declare var require: NodeRequire;

interface NodeModule {
    exports: any;
    require: NodeRequireFunction;
    id: string;
    filename: string;
    loaded: boolean;
    parent: any;
    children: any[];
}

#4樓

我接受了彼得·瓦爾加(Peter Varga)的回答 ,添加了declare var require: any; 並經過使用preprocess-loader將其製做爲適用於全部.ts文件的通用解決方案:

  1. 安裝預處理程序加載器:

    npm install preprocessor-loader
  2. 將加載程序添加到您的webpack.config.js中 (我正在使用ts-loader處理TypeScript源代碼):

module: {
        loaders: [{
            test: /\.tsx?$/,
            loader: 'ts-loader!preprocessor?file&config=preprocess-ts.json'
        }]
    }
  1. 添加將變通辦法添加到每一個源的配置:
{
    "line": false,
    "file": true,
    "callbacks": [{
        "fileName": "all",
        "scope": "source",
        "callback": "(function shimRequire(source, fileName) { return 'declare var require: any;' + source; })"
    }]
}

您能夠用相同的方法添加更強大的require.d.ts ,但declare var require: any; 在個人狀況下就足夠了。

請注意, 預處理器1.0.5中存在一個錯誤 ,該錯誤會截斷最後一行,所以請確保在末尾有額外的行空間返回,而且您會很好。


#5樓

又快又髒

若是您只有一個文件使用require,或者出於演示目的而執行此操做,則能夠在TypeScript文件的頂部定義require。

declare var require: any

TypeScript 2.x

若是您使用的是TypeScript 2.x,則再也不須要安裝Typings或Definitely Typed。 只需安裝如下軟件包。

npm install @types/node --save-dev

聲明文件的將來(6/15/2016)

諸如Typings和tsd之類的工具將繼續起做用,咱們將與這些社區一塊兒工做,以確保順利過渡。

驗證或編輯您的src /tsconfig.app.json,使其包含如下內容:

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

確保該文件位於src文件夾中,而沒有一個位於根應用程序文件夾中。

默認狀況下, 除非您指定了這些選項中的任何一個, 不然 @types下的任何軟件包都已包含在您的版本中。 閱讀更多

TypeScript 1.x

使用類型(DefinitelyTyped的替代),您能夠直接從GitHub存儲庫中指定定義。

安裝打字

npm install typings -g --save-dev

從DefinitelyType的倉庫中安裝requireJS類型定義

typings install dt~node --save --global

Webpack

若是將Webpack用做構建工具,則能夠包括Webpack類型。

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

更新您的tsconfig.json用在如下compilerOptions

"types": [
      "webpack-env"
    ]

這使您能夠執行require.ensure和其餘Webpack特定功能。

角度CLI

使用CLI,您能夠按照上面的Webpack步驟進行操做,並將「類型」塊添加到tsconfig.app.json

或者,您可使用預安裝的node類型。 請記住,這將包括客戶端代碼中實際上不可用的其餘類型。

"compilerOptions": {
    // other options
    "types": [
      "node"
    ]
  }
相關文章
相關標籤/搜索