javascript - 是否可以在 TypeScript 中创建 "weak export"

标签 javascript typescript types dead-code tree-shaking

测试模块化代码的一件不幸的事情是,有时您必须导出一些东西来测试它们。这会污染您的代码,并且还会降低编译器或 linter 上的“未使用变量”标志等不错的功能 - 如果您删除应用程序中的用法,您的测试中可能仍有用法。

一种可能的解决方案类似于“弱引用”,其中测试代码将引用它正在测试的内容,但带有明确的“linter,编译器:请不要将此引用视为用法”标志。

我检查了 tsc 标志和 tslint 配置文件,但没有看到任何东西。 A)我错过了什么吗? B) 这是个好主意吗?实现起来有多难?

(其他解决方案就没那么好。例如,您无法导出内容然后使用 rewire 对模块进行内省(introspection)以获取私有(private)内容。我的理解是 tsc将无法遵循这样的引用。)

感谢您的帮助。

最佳答案

将它们分离到不同的模块中,这样您就可以更轻松地对其进行测试。假设您有以下用例。

function a () {/* implementation */}
export function b () {
   //... code
   a()
  //..code
}

如果 'a' 在不同的模块上并且被 'b' 要求,那么您的测试可以直接要求该模块。对模块 ('b') 依赖项使用控制反转也可能很有用。这将允许您注入(inject)模拟/ spy 并更好地测试它。在我们的 a/b 示例中,它应该看起来像这样。

import {a} from './a'
export function CreateB(aFunc:a = a){
  return function b(){
    //..code
    aFunc()
    //..code
  }
}

如果你能提供一个更具体的例子,我可能会提供更多帮助。

关于javascript - 是否可以在 TypeScript 中创建 "weak export",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51945753/

相关文章:

javascript - 在 Angular JS 中获取 HTTP 请求的值

angular - 如何在 HTTPGET 上动态添加标记到谷歌地图组件(Angular 6)

reactjs - 如何将默认 react 上下文值设置为来自 firestore 的数据?

javascript - 我们如何使用 Three.js 将等距柱状图像用于 WebXR?

javascript - three.js ES6 如何只导入特定模块

javascript - SlickGrid 并从单元格复制文本

c# - 从类型的部分名称获取 System.Type

typescript - Vuetify Jest 未知自定义元素 <v-*>

types - Coq nat 类型检查匹配

c# - 定义类型别名