Javascript 是否可以创建一个;“出口疲软”;打字
测试模块化代码的一个不幸之处是,有时您不得不导出一些东西来测试它们。这会污染您的代码,并且还会降低编译器上的“unused variable”标志或linter等功能的价值-如果您删除了应用程序中的某个用法,那么您的测试中可能仍有该用法 一种可能的解决方案是类似“弱引用”的东西,其中测试代码将引用它正在测试的东西,但带有一个明确的“linter,compiler:请不要将此引用作为用法”标志 我检查了Javascript 是否可以创建一个;“出口疲软”;打字,javascript,typescript,types,dead-code,tree-shaking,Javascript,Typescript,Types,Dead Code,Tree Shaking,测试模块化代码的一个不幸之处是,有时您不得不导出一些东西来测试它们。这会污染您的代码,并且还会降低编译器上的“unused variable”标志或linter等功能的价值-如果您删除了应用程序中的某个用法,那么您的测试中可能仍有该用法 一种可能的解决方案是类似“弱引用”的东西,其中测试代码将引用它正在测试的东西,但带有一个明确的“linter,compiler:请不要将此引用作为用法”标志 我检查了tsc标志和tslintconfig文档,但没有看到任何内容。A) 我错过什么了吗?B) 这是个
tsc
标志和tslint
config文档,但没有看到任何内容。A) 我错过什么了吗?B) 这是个好主意吗?实施起来有多困难
(其他解决方案就没那么好了。例如,你不能导出东西,然后使用重新布线对模块进行内省,以获取私人物品。我的理解是,tsc将无法遵循这样的参考。)
感谢您的帮助。将它们分离到不同的模块中,这样您就可以更轻松地进行测试。假设您有以下用例
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
}
}
如果你能提供一个更具体的例子,我也许能提供更多的帮助 unused*
对任何导出的内容都不起作用,我不会导出任何不属于模块的公共API的内容,我只会测试模块的公共API,我不会关注私有实现细节。但为了解决您的问题,我认为没有办法做到这一点,有一个未记录的编译器标志告诉编译器是否在d.ts
中包含导出,但我不确定这是否会有帮助。如果您在没有测试的情况下编译应用程序,那么树震动器应该能够删除所有未使用的函数