包含node.d.ts时的Typescript编译器错误

我最近开始将表单PHP切换到Node.js,由于我是一个巨大的Typescript风扇,我正在使用Typescript + Node.js。 当我开始放大并真正构build我的代码时,我的示例编译就很好。 但后来我遇到了一个问题。 每当在.ts文件中引用node.d.ts(带有引用doc注释)时,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); 

如果我将<reference path="node.d.ts" />到search_request.ts的顶部,则编译正常。 如果我删除它,我会收到有关缺less定义的警告。 但是,如果我把它包含在任何一个文件中,编译main.ts会给我几百个关于重复标识符的警告。

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

所以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。 但不知何故,节点(或可能是TSC)自动包括直接高于main.ts的node.d.ts文件。 我不知道如何,它仍然混淆了我,但这是问题。

 /// <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,这应该只是工作。