Jasmine框架运行spec.ts报错TS2304与TS2339求助
解决@types/core-js@0.9.46导致的TypeScript编译错误
你遇到的这些错误(找不到PropertyKey、PromiseConstructor,以及SymbolConstructor属性不存在),本质是老旧版本的@types/core-js和现代TypeScript环境不兼容导致的。下面是具体的解决步骤:
1. 卸载不兼容的旧版本
首先把当前的@types/core-js@0.9.46卸载,它的类型定义已经完全跟不上你的项目环境了:
npm uninstall @types/core-js --save-dev
2. 安装匹配的依赖
根据你项目使用的core-js版本,选择对应的方案:
- 如果项目用的是core-js@2:安装对应大版本的类型定义,保证版本匹配
npm install @types/core-js@2 --save-dev - 如果项目已经升级到core-js@3:core-js@3本身已经自带了官方类型定义,不需要单独装
@types/core-js,直接安装core-js即可:npm install core-js@3 --save
3. 修正tsconfig配置
检查你的tsconfig.json(如果是Jasmine测试专用,看tsconfig.spec.json),确保lib选项包含必要的ES特性,让TypeScript使用内置的标准类型,避免第三方类型冲突:
{ "compilerOptions": { "lib": ["es2015", "dom"], "types": ["jasmine"], // 确保引入Jasmine的类型定义 // 其他编译配置... } }
错误原因说明
@types/core-js@0.9.46是针对非常古老的core-js 0.9版本的类型声明,这个版本的定义和现代TypeScript内置的ES2015+标准类型完全不兼容:
PropertyKey、PromiseConstructor这些类型现在已经是TypeScript内置的标准类型,旧的@types/core-js要么没声明,要么声明了冲突的版本- Symbol的
for、hasInstance等属性,也是ES2015新增的特性,旧类型定义里没有覆盖这些内容,导致TS报错说属性不存在
内容的提问来源于stack exchange,提问作者Lakshmi




