我最近开始将表单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时会出错?
答案 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
标记与顶级import
或export
的非.d.ts文件混合。
如果您将reference
标记移到search_request.ts。