分析节点

时间:2018-02-16 15:28:13

标签: typescript typescript-typings typescript-definitions

该库的类型定义公开了类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 个答案:

答案 0 :(得分:1)

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

TS esModuleInterop中有一个标志,用于消除两个系统之间的差异。有了该标志,就有可能像import module from 'module'这样的东西代替import * as module from 'module'

这是方安德鲁(Andrew Fong)github issue笔记。

  

缺少esModuleInterop时,使用该语法的唯一方法是让analytics-node迁移到默认的ES模块导出。事情就是这样-除非Node本身强制迁移到ES模块,否则CommonJS单次导出仍然完全有效。从技术上讲,没有任何要修复的东西。 esModuleInterop不是一个变通的解决方法。实际上,AFAICT,TS开发人员希望我们键入这些场景。