【问题标题】:Typescript compiler errors when including node.d.ts包含 node.d.ts 时的 Typescript 编译器错误
【发布时间】:2013-03-23 02:48:31
【问题描述】:

我最近开始从 PHP 切换到 Node.js,由于我是 Typescript 的忠实粉丝,我正在使用 Typescript + Node.js。当我开始扩大规模并真正构建我的代码时,我的示例编译得很好。但后来我遇到了一个问题。每当在我的一个 .ts 文件中引用 node.d.ts(带有参考文档注释)时,Node.js 中的 Typescript 编译器都会抱怨重复定义。我的两个 .ts 文件抱怨没有 node.d.ts 定义,但我的 main.js 文件没有。 (以下文件:)

search_request.ts

/// <reference path="definitions/mustache.d.ts" />

import url = module("url");
import mu = module("mu2");

export function handler(request, response) {
    //code..
}

main.ts

/// <reference path="servers/search_request.ts" />

import search_request = module("./servers/search_request");
import express = module("express");

var app = express();

app.get("/search.html", search_request.handler);
app.listen(3000);

如果我将 &lt;reference path="node.d.ts" /&gt; 添加到 search_request.ts 的顶部,它编译得很好。如果我删除它,我会收到有关缺少定义的警告。但是,如果我将它包含在任一文件中,编译 main.ts 会给我数百条关于重复标识符的警告。

我不是 Typescript 的新手,但我是 Node.js 的新手,并且是直接使用 tsc 编译器而不是通过 VS2012 的新手。我到底做错了什么?编译器是否像 lib.d.ts 一样隐式包含 node.d.ts?如果是这样,为什么我在编译 search_request.ts 时会出错?

【问题讨论】:

  • 我有同样的问题,但我没有文件双...

标签: node.js typescript tsc


【解决方案1】:

所以 Ryan Cavanaugh 的更改确实解决了我的问题,但是以一种迂回的方式。我的真正问题与您所期望的完全一样:node.d.ts 被多次包含(就像 express.d.ts 一样)。我的文件结构是这样的:

C:\Project
   -node.d.ts
   \public
      -main.ts
      \definitions
         -node.d.ts

很自然,在我的 main.ts 文件中,我包含了定义/node.d.ts。但不知何故,node(或者可能是 tsc)自动包含了 node.d.ts 文件,该文件直接比 main.ts 高一个。我不知道怎么做,它仍然让我很困惑,但这就是问题所在。

【讨论】:

  • 同样的事情让我追着我的尾巴。使用类型包安装节点类型给了我一个“主”和一个“浏览器”目录,每个目录都有一个 node.d.ts。我排除了浏览器,因为我没有使用它和中提琴!
【解决方案2】:
/// <reference path="servers/search_request.ts" />

import search_request = module("./servers/search_request");
import express = module("express");

一个好的经验法则是永远不要将reference 标签与顶级importexport 混合到非.d.ts 文件中。

如果您将 reference 标记删除到 search_request.ts,这应该会起作用。

【讨论】:

  • 谢谢,这并没有解决我所有的问题,但它解决了其中一个问题。 :p Node.js Typescript 与浏览器 Typescript 相比,还有很多怪癖。
  • 事实证明您的回答确实解决了问题,但不是问题的根本原因。你可以看看我的回答,看看到底发生了什么。
  • 我实际上也遇到了类似的错误,但根本原因是我们的项目依赖于旧版本的节点(0.12)。大多数(如果不是全部)*.d.ts 文件都引用了通用的node.d.ts,默认为当前版本的 6.x。我的解决方法是将 node-0.12.d.ts 重命名为 node.d.ts 并更新我的 tsconfig.json 以引用它。
猜你喜欢
  • 2015-11-21
  • 2017-08-04
  • 2010-09-30
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
  • 2016-04-02
  • 1970-01-01
  • 2014-05-26
相关资源
最近更新 更多