代码之家  ›  专栏  ›  技术社区  ›  uladzimir

分析节点的返工类型定义

  •  1
  • uladzimir  · 技术社区  · 6 年前

    有公开类的库的类型定义 Analytics

    所以,来源是下一个

    class Analytics {}
    
    module.exports = Analytics
    

    类型定义很好,很快就会

    declare namespace AnalyticsNode {
      export class Analytics {}
    }
    
    export = AnalyticsNode.Analytics
    

    但在这些声明之后,使用库的唯一方法是

    import Analytics = require('analytics-node')
    

    如何在本地重写类型定义,使其以ES6导入方式工作?

    我试图声明一个模块

    declare module 'analytics-node' {
      // export default
      // export
      // export = 
    }
    

    但这行不通。( import * as Analytics from 'analytics-node' 获取对函数的访问权限,但没有 new Analytics 在编译器中引发错误)

    我试着遵循指南 module class definitions 但是没有运气。

    1 回复  |  直到 6 年前
        1
  •  1
  •   uladzimir    6 年前

    问题似乎在于CommonJS(节点)和ES模块实现之间的差异。

    TS中有一个标志 esModuleInterop 这消除了两种制度之间的差异。有了这个标志,就有可能 import module from 'module' 而不是 import * as module from 'module'

    这是一张来自 github issue 通过 安德鲁·方 .

    如果没有esModuleInterop,使用该语法的唯一方法是让analytics节点移动到默认的ES模块导出。但问题是,除非节点本身强制迁移到ES模块,否则CommonJS单一导出仍然完全有效。从技术上讲,没有什么需要修复的。esModuleInterop不是一个黑客解决方案。这实际上是TS开发人员希望我们键入这些场景的方式。