允许在 TypeScript 中调用未定义的函数来测试 JavaScript 环境
Allow undefined function calls in TypeScript to test for JavaScript environments
我正在构建一个小型 TypeScript 框架,我还想确保 JavaScript 兼容性。我有一个像这样的 class 界面:
class Foo {
constructor(name : string, id : number);
}
由于此函数也可能从普通 JavaScript 调用,我还进行了一些健全性检查以确保参数实际上具有正确的类型。
到目前为止,还不错。对于这个功能,我还有用 TypeScript 编写的单元测试。我现在想要的是有一个单元测试来检查这个函数在提供错误的参数类型时是否抛出异常。例如:
new Foo(3) // throws an exception
// Undefined overload in TS
// But should be testable in TS for JS-compatibility
现在的问题是,当编译这样的单元测试时,它会抛出一个错误,正确地指出我试图调用的函数不存在。这意味着我无法编译我的 TypeScript 单元测试。
到目前为止,我最好的解决方法是将这些类型的单元测试定义为 JavaScript 测试,而不是 TypeScript 测试。但我宁愿将这些测试与 class Foo 的所有其他测试组合在一起,而不是按 Type- 和 JavaScript.
拆分它们
所以,我正在寻找一种方法来告诉编译器在我的单元测试范围内可以调用这个未定义的函数,所以我可以测试它。或者可以为测试范围定义签名。有人知道这是否可能吗?
谢谢!
佩德罗
看起来有点恶心,但是你可以告诉编译器把Foo
当作any
:
var a = new (<any>Foo)(3);
<any>
类型断言是重要的一点。
您可以使用转换语法覆盖 Typescript 正在考虑的变量类型:
var a = new Foo(<string> 42, <number> "not a number")
在这种情况下,如果您更改构造函数签名,即使没有 运行 测试,您也会遇到编译时错误。
我正在构建一个小型 TypeScript 框架,我还想确保 JavaScript 兼容性。我有一个像这样的 class 界面:
class Foo {
constructor(name : string, id : number);
}
由于此函数也可能从普通 JavaScript 调用,我还进行了一些健全性检查以确保参数实际上具有正确的类型。
到目前为止,还不错。对于这个功能,我还有用 TypeScript 编写的单元测试。我现在想要的是有一个单元测试来检查这个函数在提供错误的参数类型时是否抛出异常。例如:
new Foo(3) // throws an exception
// Undefined overload in TS
// But should be testable in TS for JS-compatibility
现在的问题是,当编译这样的单元测试时,它会抛出一个错误,正确地指出我试图调用的函数不存在。这意味着我无法编译我的 TypeScript 单元测试。
到目前为止,我最好的解决方法是将这些类型的单元测试定义为 JavaScript 测试,而不是 TypeScript 测试。但我宁愿将这些测试与 class Foo 的所有其他测试组合在一起,而不是按 Type- 和 JavaScript.
拆分它们所以,我正在寻找一种方法来告诉编译器在我的单元测试范围内可以调用这个未定义的函数,所以我可以测试它。或者可以为测试范围定义签名。有人知道这是否可能吗?
谢谢!
佩德罗
看起来有点恶心,但是你可以告诉编译器把Foo
当作any
:
var a = new (<any>Foo)(3);
<any>
类型断言是重要的一点。
您可以使用转换语法覆盖 Typescript 正在考虑的变量类型:
var a = new Foo(<string> 42, <number> "not a number")
在这种情况下,如果您更改构造函数签名,即使没有 运行 测试,您也会遇到编译时错误。