定位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.values
在es5
中不可用,我希望打字稿在编译时会引发错误。发生这种情况:
> 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
的准确警告?
答案 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",
}