如何为打字稿打字定义编写测试?

zha*_*chy 7 typescript typescript-typings

我们有一个 Node.js 库,最近我们为它添加了一个类型定义。

但是我怎么能测试类型定义呢?

Ale*_*ksi 8

Microsoftdtslint是一个用于测试类型声明的便捷工具。顾名思义,它是一种静态分析工具,不会运行测试文件,而仅对它们进行类型检查。您还可以使用该工具评估的基于注释的断言来补充测试:

\n\n
import { f } from "my-lib"; // f is(n: number) => void\n\n// $ExpectType void\nf(1);\n\n// Can also write the assertion on the same line.\nf(2); // $ExpectType void\n\n// $ExpectError\nf("one");\n
Run Code Online (Sandbox Code Playgroud)\n\n

tsd是另一个具有类似断言的工具:

\n\n
import {expectType} from \'tsd\';\nimport concat from \'.\';\n\nexpectType<string>(concat(\'foo\', \'bar\'));\nexpectType<string>(concat(1, 2));\n
Run Code Online (Sandbox Code Playgroud)\n\n

另外,从 Typescript 3.9 开始,您可以使用内置// @ts-expect-error注释:

\n\n
\n

当一行以 // @ts-expect-error 注释为前缀时,TypeScript 将禁止报告该错误;但如果\xe2\x80\x99s 没有错误,TypeScript 将报告 // @ts-expect-error isn\xe2\x80\x99t 是必要的。(来源

\n
\n


Pas*_*asi 5

FreedomTyped中的测试是应该正确进行类型检查的文件。因此,测试会演练 API 的不同部分,并通过编译器运行(但实际上并未执行生成的 JavaScript 代码)。例如,请参阅@types/express 的测试。

对于您自己的项目,我猜您会自己编写一个类似的测试文件,并将其编译为构建的一部分(如果编译成功,则测试成功)。当然,如果您已经有使用这些类型定义的现有 TypeScript 代码,那么这可能是足够的测试。

Typings-checker是一个概念验证,它也允许测试失败(错误类型的代码不应编译)。