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

时间:2013-04-01 23:05:50

标签: node.js typescript tsc

我最近开始将表单PHP切换到Node.js,因为我是一个巨大的Typescript粉丝,我正在使用Typescript + Node.js.当我开始扩展并真正构建我的代码时,我的样本编译得很好。但后来我遇到了一个问题。每当我的一个.ts文件中引用node.d.ts(带有引用doc注释)时,Node.js中的Typescript编译器就会抱怨重复的定义。我的两个.ts文件抱怨没有node.d.ts definitons,但我的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的顶部,则编译正常。如果我将其删除,我会收到有关缺少定义的警告。但是,如果我将它包含在任一文件中,编译main.ts将为我提供数百个关于重复标识符的警告。

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

2 个答案:

答案 0 :(得分:3)

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

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

很自然地,在我的main.ts文件中,我包含了definitions / node.d.ts。但不知何故,node(或可能是tsc)自动包含一个直接高于main.ts的node.d.ts文件。我不知道怎么样,它仍然让我感到困惑,但那就是问题。

答案 1 :(得分: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。

,这应该可行