5

我最近开始从 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);

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

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

4

2 回答 2

3

所以 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 高一个。我不知道怎么做,它仍然让我很困惑,但这就是问题所在。

于 2013-04-02T15:33:37.433 回答
2
/// <reference path="servers/search_request.ts" />

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

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

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

于 2013-04-01T23:17:53.467 回答