断言TypeScript应该无法键入检查一些示例代码

时间:2018-07-05 14:47:14

标签: typescript testing typechecking

当我编写具有通用约束的TypeScript库时,我希望能够指定应该类型检查的代码和应该不应该进行的代码的测试(因为,例如,我要确保类型检查器正在捕获无法正确满足约束的内容。

我没有在常规的单元测试库中找到解决方案(因为失败的测试最初不会编译)。我想我在TypeScript测试套件的深处看到了一些这样的示例,其中他们使用文件命名或注释来表示断言,但现在找不到它们,并且我无法阐明测试运行程序如何在如此大的范围内工作无论如何。谷歌搜索也很难:我想到的每一个术语组合都会带回有关类型保护的链接或有关TypeScript本身的错误报告。

我知道我可以建立一个bash脚本,该脚本仅对文件运行tsc并断言它们失败了,但是我更愿意在可能的情况下匹配特定的编译失败。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以使用Microsoft/dtslint。完成设置后,您可以编写如下测试文件:

index.d.ts:

// TypeScript Version: 2.1

declare module 'Abc' {
    function TestFunc(s: string): undefined;
}

test.ts:

import Abc from 'Abc';

// $ExpectError
Abc.TestFunc(true);

// $ExpectError
Abc.TestFunc(5);

Abc.TestFunc("it is a string");

现在,当您运行dtslint cli工具时,将不会返回任何错误,因为所有错误都是可以预料的。如果是错误未用$ExpectError注释(例如Abc.TestFunc(true);),则dtslint工具失败并显示一条消息:

Error: C:/stackoveflow/test.ts:3:14
ERROR: 3:14  expect  TypeScript@next compile error:
Argument of type 'true' is not assignable to parameter of type 'string'.

    at I:\..\dtslint\bin\index.js:101:19
    at Generator.next (<anonymous>)
    at fulfilled (I:\..\dtslint\bin\index.js:5:58)
    at <anonymous>

答案 1 :(得分:1)

对于 tsc,使用 @ts-expect-error

来自上面@jmattheis 示例的片段:

// @ts-expect-error
Abc.TestFunc(true);