防止玩笑干扰打字稿

时间:2020-08-19 17:04:10

标签: typescript jestjs

定位es5时如何使用笑话和打字稿?我安装的Jest似乎导致打字稿错误地认为某些对象方法存在而没有。

摘要在安装jest之前,npx tsc ./index.ts --target es5会引发错误,因为es5中不存在Object.values,这与我期望的完全一样。安装玩笑之后,相同的命令不再引发错误。注意:我不是询问如何使用Object.values,我想知道为什么打字稿在不应该使用的时候让我来。

下面是一个最小的示例。

设置

目录:

node_modules/
index.js
index.ts
package.json
package-lock.json

// package.json
{
  "main": "index.js",
  "devDependencies": {
    "jest": "^26.4.0",
    "typescript": "^3.9.7"
  }
}

// index.ts
export const f = (x: Object) => Object.values(x);

由于Object.valueses5中不可用,我希望打字稿在编译时会引发错误。发生这种情况:

> npx tsc ./index.ts --target es5

产量:

index.ts:1:40 - error TS2339: Property 'values' does not exist on type 'ObjectConstructor'.

1 export const f = (x: Object) => Object.values(x);
                                         ~~~~~~
Found 1 error.

问题

在安装了jest(npm install jest --save-dev)之后,相同的打字稿命令运行而没有任何抱怨:

# after installing jest
> npx tsc ./index.ts --target es5

没有错误。

我如何将开玩笑与打字稿一起使用,并获得有关Object.values的准确警告?

2 个答案:

答案 0 :(得分:2)

target意味着语法特征已转换为指定的目标,但这并不意味着不能使用可填充的特征,尽管没有es5配置选项的lib目标默认为ES5类型:

注意:如果未指定--lib,则会注入默认的库列表。注入的默认库为:

►对于--target ES5:DOM,ES5,ScriptHost

►对于--target ES6:DOM,ES6,DOM.Iterable,ScriptHost

由于Jest应该在Node环境中运行,因此jest软件包中包含@types/node,可以使用ES6 +库。

解决方案是不依赖默认TypeScript配置并显式指定所有相关选项。生产和测试应该有单独的TypeScript配置。为了使TypeScript不自动选择可能不属于当前环境的@types类型,需要明确指定types选项。

答案 1 :(得分:0)

此设置对我有用:

添加类型信息:

return

添加笑话和打字稿支持:

npm i @types/jest @types/node

生成默认的玩笑配置:

npm i -D jest ts-jest typescript

像这样设置jest.config.js配置tranfomrm选项:

jest --init

添加要测试的测试过程(总和):

  "transform": {
    "^.+\\.(ts|tsx)$": "ts-jest"
  },

添加测试(sum.test.ts):

export default function sum(a: number, b: number): number {
  return a + b
}

像这样修改package.json“脚本”选项:

test('adds 1 + 2 to equal 3', () => {
  expect(sum(1, 2)).toBe(3)
})

运行 "scripts": { "test": "jest", }