【问题标题】:TypeScript compiler error on importation of Node module?导入 Node 模块时出现 TypeScript 编译器错误?
【发布时间】:2014-03-31 06:31:45
【问题描述】:

我正在尝试使用this,但编译器正在生成以下内容:

Client.ts(2,5): error TS2134: Subsequent variable declarations must have the same type. 
Variable 'XMLHttpRequest' must be of type '{ prototype: XMLHttpRequest; LOADING: number; 
DONE: number; UNSENT: number; OPENED: number; HEADERS_RECEIVED: number; new(): 
XMLHttpRequest; }', but here has type 'any'.

作为参考,产生错误的行是:

var XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;

我是否正确地假设这是因为 node.d.ts 没有此模块的定义?如果是这样,我将如何实现定义,让我感到困惑的是prototypenew() 的类型为XMLHttpRequest。这是递归引用还是说空类声明就足够了?

【问题讨论】:

    标签: javascript node.js typescript


    【解决方案1】:

    是的 node.d.ts 不会有那个声明。

    我有 2 个可能的选项供您手动创建 node-XMLHttpRequest.d.ts。 (我找不到已经定义的)或使用var XMLHttpRequest = <any>(require('xmlhttprequest').XMLHttpRequest);

    如果您在代码中大量使用此库,我建议您定义 node-XMLHttpRequest.d.ts 文件以从 typescript 类型检查中受益。

    【讨论】:

      【解决方案2】:

      这是因为 XMLHttpRequest 是在 lib.d.ts 中定义的:

      declare var XMLHttpRequest: {
          prototype: XMLHttpRequest;
          new (): XMLHttpRequest;
          LOADING: number;
          DONE: number;
          UNSENT: number;
          OPENED: number;
          HEADERS_RECEIVED: number;
      }
      

      这与您对 XMLHttpRequest 的定义相冲突,实际上已解析为 any

      var XMLHttpRequest
      

      如果此库与浏览器XMLHttpRequest 兼容,您可以这样做(拆分声明和分配)。这样编译器就不会尝试将其重新定义为any

       var XMLHttpRequest;
       XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;
      

      如果不是,我建议您使用不同的名称,或者使用 --noLib 编译器标志进行编译。

      【讨论】:

      • 谢谢,重命名成功了。我不知道其他地方正在使用定义,事后看来很明显它必须这样做。
      猜你喜欢
      • 1970-01-01
      • 2015-07-19
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      相关资源
      最近更新 更多