有公开类的库的类型定义 Analytics
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 在编译器中引发错误)
import * as Analytics from 'analytics-node'
new Analytics
我试着遵循指南 module class definitions 但是没有运气。
问题似乎在于CommonJS(节点)和ES模块实现之间的差异。
TS中有一个标志 esModuleInterop 这消除了两种制度之间的差异。有了这个标志,就有可能 import module from 'module' 而不是 import * as module from 'module'
esModuleInterop
import module from 'module'
import * as module from 'module'
这是一张来自 github issue 通过 安德鲁·方 .
如果没有esModuleInterop,使用该语法的唯一方法是让analytics节点移动到默认的ES模块导出。但问题是,除非节点本身强制迁移到ES模块,否则CommonJS单一导出仍然完全有效。从技术上讲,没有什么需要修复的。esModuleInterop不是一个黑客解决方案。这实际上是TS开发人员希望我们键入这些场景的方式。