该库的类型定义公开了类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的指南,但没有运气。
答案 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开发人员希望我们键入这些场景。