尝试进行测试以确保只能为类型化变量分配某些值。如果分配了无效值,是否可以使用笑话来引发错误,而不会导致打字稿阻止测试运行并在测试运行之前引发错误?
In class constructor:
defaultValue: string | null
In test:
expect(() => instance.defaultValue = 100).toThrow()
我希望测试能够运行并确认确实会引发错误,但是该错误是在测试运行之前抛出的,从而阻止了所有测试的运行。
答案 0 :(得分:4)
Typescript不是运行时类型检查器,它是编译时类型检查器。这意味着在将代码转换为javascript之前,将检查所有类型,并且如果存在类型错误,则编译将失败。如果您的班级从未经验证的来源(即IE API)获取数据,则无法使用打字稿进行检查。
您的测试意味着2件事之一:
要么您的构造函数用于消耗仅在运行时才知道的数据,但应始终为字符串,如果不是,则必须抛出错误。在这种情况下,您可以将类强制转换为any
,这将完全删除该对象的类型检查,但是它将允许您测试类是否抛出错误。
const instance = new (MyClass as any)(42) // throws an error
或者您的类仅由开发人员显式提供给它的数据使用,并且您的测试仅验证打字稿不会允许开发人员犯错误。在这种情况下,这不是有用的测试,您应该删除它。