#2588·knockout

@types/knockout npm 包声明为环境模块,而不是导出命名空间

作者: andy1547创建于 2022年2月14日更新于 2022年2月14日

首先,我要感谢所有贡献者创建了如此伟大的项目,它确实经受住了时间的考验,并在构建许多丰富的用户界面中发挥了重要作用,你们为自己感到骄傲。 目前, @types 包在导出之前声明了一个环境模块"knockout", export = (以 CommonJS/AMD 格式导出单个对象)。我不确定环境模块部分是否必需或推荐,所以我对现代声明编写实践进行了研究。 关于选择 UMD 模板的建议,请参阅 https://www.typescriptlang.org/docs/handbook/declaration-files/templates/global-plugin-d-ts.html#examples-of-umd-libraries。 仔细查看 v3.5.1.js 分发文件,我认为我们需要暴露一个对象,因此这里提供的模块模板是最合适的 https://www.typescriptlang.org/docs/handbook/declaration-files/templates/module-d-ts.html#default-exports。 编写时似乎有选择,是使用新的 ESM 默认导出语法 esModuleInterop:true,还是 export =,我认为后者对于向后兼容性来说是最佳选择。 我的问题是,为什么当前定义 @types/knockout/index.d.ts v3.4.71 定义了一个环境模块? 是否可以使用 export as namespace myLib 语法来处理全局使用(在没有模块加载器的情况下)? 如果您想看一些示例,请查看 chart.js/jquery/moment。 第二,我注意到官方 npm knockout 包包括类型,但定义方式却不一样,消费者在未来应该使用哪个包?

内容来源: knockout/knockout