我正在尝试启动并运行我的第一个 TypeScript 和 DefinedTyped Node.js 应用程序,但遇到了一些错误。
当我尝试转译一个简单的 TypeScript Node.js 页面时,我收到错误“TS2304:找不到名称 ‘require’”。我已经阅读了 StackOverflow 上其他几次出现此错误的情况,但我认为我没有类似的问题。我在 shell 提示符下运行命令:
tsc movie.server.model.ts.
这个文件的内容是:
'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')行了。
var mongoose=require('mongoose')
Typings/tsd.d.ts 文件的内容是:
/// <reference path="node/node.d.ts" /> /// <reference path="requirejs/require.d.ts" />
.d.ts 文件引用放置在适当的文件夹中,并通过以下命令添加到 typings/tsd.d.ts:
tsd install node --save tsd install require --save
生成的 .js 文件似乎工作正常,所以我可以忽略该错误。但我会很感激知道为什么会发生这个错误以及我做错了什么。
如果您只有一个使用 require 的文件,或者您出于演示目的这样做,您可以在 TypeScript 文件的顶部定义 require。
declare var require: any
如果您使用的是 TypeScript 2.x,则不再需要安装 Typings 或肯定类型。只需安装以下软件包。
npm install @types/node --save-dev
申报文件的未来 (6/15/2016)
Typings 和 tsd 等工具将继续工作,我们将与这些社区一起工作以确保顺利过渡。
验证或编辑您的 src /tsconfig.app.json 使其包含以下内容:
... "types": [ "node" ], "typeRoots": [ "../node_modules/@types" ] ...
确保是 src 文件夹中的文件,而不是根应用程序文件夹中的文件。
默认情况下,@types 下的任何包都已包含在您的构建中 ,除非 您指定了这些选项中的任何一个。 阅读更多
使用类型(DefinitelyTyped 的替代品),您可以直接从 GitHub 存储库中指定定义。
安装类型
npm install typings -g --save-dev
从DefinitelyType 的repo 安装requireJS 类型定义
typings install dt~node --save --global
如果您使用 Webpack 作为构建工具,则可以包含 Webpack 类型。
npm install --save-dev @types/webpack-env
tsconfig.json使用以下内容更新您的compilerOptions:
tsconfig.json
compilerOptions
"types": [ "webpack-env" ]
这允许你做require.ensure和其他 Webpack 特定的功能。
require.ensure
使用 CLI,您可以按照上面的 Webpack 步骤并将“类型”块添加到您的tsconfig.app.json.
tsconfig.app.json
或者,您可以使用预安装的node类型。请记住,这将包括您的客户端代码中实际上不可用的其他类型。
node
"compilerOptions": { // other options "types": [ "node" ] }