是否可以在TypeScript中创建“弱导出”

时间:2018-08-21 09:36:14

标签: javascript typescript types dead-code tree-shaking

关于测试模块化代码的一件不幸的事是,有时您必须导出内容以进行测试。这会污染您的代码,并且还会使编译器或linter上的“未使用的变量”标志等出色功能的价值降低-如果您删除了应用程序中的用法,那么您的测试中可能还会有用法。

一种可能的解决方案是类似“弱引用”,其中测试代码将引用它正在测试的对象,但是带有显式的“ linter,editor:请不要将此引用视为用法”标志。 / p>

我同时检查了tsc标志和tslint配置文件,但是什么也没看到。 A)我错过了什么吗? B)这是个好主意,实施起来会有多困难?

(其他解决方案也不太理想。例如,您无法导出内容,然后使用rewire对模块进行自省以获取私有内容。我的理解是,tsc不会能够遵循这样的参考。)

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

将它们分成另一个模块,这样您可以更轻松地对其进行测试。假设您有以下用例。

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

如果'a'在另一个模块上并且由'b'要求,则您的测试可以直接要求该模块。对模块(b)依赖项使用控制反转可能也很有用。这将允许您注入模拟/间谍并对其进行更好的测试。在我们的a / b示例中,它应该看起来像这样。

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

如果您将提供更具体的示例,我也许能够提供更多帮助。