ts-jest:TypeScript 类型错误被忽略

Posted

技术标签:

【中文标题】ts-jest:TypeScript 类型错误被忽略【英文标题】:ts-jest: TypeScript type errors are ignored 【发布时间】:2019-08-28 11:07:30 【问题描述】:

我刚开始学习 TypeScript,并尝试了一些带有 jest 单元测试的简单应用程序(使用 ts-jest):

简单的 app.ts 模块:

function greet(person: string): string 
  return `Hello, $person`;


exports.greet = greet;

简单的 app.spec.ts 代码:

const greetObject = require('../app');

greetObject.greet(1);

describe('greet function', () => 
  it('should return greeting', () => 
    expect(greetObject.greet('Dude')).toEqual('Hello, Dude');
  );
  it('should throw type exception', () => 
    const spy = jest.spyOn(greetObject, 'greet');
    greetObject.greet(1);
    /** @todo what should happen ? */
  );
);

问题是:我是否应该收到类型错误?事实上,我在这里没有收到任何错误。

但是如果我在 app.ts 文件中使用错误的参数类型调用 greet,整个测试套件就会失败。

我在 TypeScript 单元测试中遗漏了什么吗?

UPD. 将 require 转换为 ES6 导入。 TypeScript 诊断现在可以工作了,但我仍然不知道我是否可以对错误类型做任何事情并测试这些情况。任何建议表示赞赏。

【问题讨论】:

在我的情况下没有帮助,ts-jest 仍然忽略传递无效类型,即使我正在使用 ES6 导入((你能显示你的配置文件吗? 【参考方案1】:

我应该收到类型错误吗?

不在这里。

您正在测试的是您的 TS 文件的 JS 输出。

TS 错误是编译时间 错误。

我仍然不知道我是否可以对错误的类型做任何事情并测试这些情况。

TypeScript 在运行时没有类型检查,因为运行时不是 TypeScript,而是 javascript

如果你想验证收到的一些对象,你应该实现实际的检查功能。

也许有帮助:

How to check the object type on runtime in TypeScript?

【讨论】:

这意味着类型错误是在编译级别,而不是单元测试应该涵盖的东西? 通常我会这么说,是的。但是,也许您需要一些验证,例如,如果您从外部源获取对象。在这种情况下,您需要在运行时检查类型 - 但这并不等同于出现 TypeScript tpye 错误。您可以使用可以帮助您的 TypeScript 类型保护(例如,请参阅我的答案中的链接问答),但您必须自己编写检查机制。

以上是关于ts-jest:TypeScript 类型错误被忽略的主要内容,如果未能解决你的问题,请参考以下文章

Jest、Typescript、ts-jest:覆盖范围略有不正确

Jest / Ts-Jest / Babel:调试失败。错误表达式:输出生成失败

为 react typescript 项目设置 ts-jest

TypeScript ts-jest 预处理器的目的是啥?

ts-jest - 运行 jest 时从类型 (.d.ts) 中声明 const 值未定义

ts-jest:将“@”字符映射到 /src 文件夹