首页 文章

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

提问于
浏览
5

我最近开始将表单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 回答

  • 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文件 . 我不知道怎么样,它仍然让我感到困惑,但那就是问题所在 .

  • 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,这应该可以正常工作 .

相关问题