TypeScript报错:类型'{}'不存在'keys'属性,求解决方案
问题分析与解决方案
针对你在target为ES6、module为CommonJS的TypeScript中间件中遇到的错误,结合代码和配置场景,以下是具体排查和解决方法:
1. fetch 环境兼容与类型问题
Node.js环境(CommonJS模块通常用于Node.js)未内置fetch API,需手动处理:
- 安装依赖及类型声明:
npm install node-fetch npm install -D @types/node-fetch - 在代码中导入
fetch:
若使用Node.js 18+,可启用内置import fetch from 'node-fetch';fetch,需在tsconfig.json中设置"lib": ["ES2022", "DOM"]。
2. jwkToPem 类型缺失
使用jwk-to-pem包时,需安装对应类型声明文件,否则TypeScript会报错:
- 安装类型依赖:
npm install -D @types/jwk-to-pem - 确保正确导入:
import jwkToPem from 'jwk-to-pem';
3. await 未在async函数中使用
代码中使用了await fetch(URL),但外层函数未标记为async,这会触发语法错误。需将包含这段代码的函数声明为async:
async function fetchJWKs() { try { const response = await fetch(URL); // ... 你的其余代码逻辑 } catch (error) { // ... 错误处理代码 } }
4. 全局pems的类型安全检查
虽然你定义了let pems: { [key: string]: string } = {},需确保key_id是字符串类型,避免类型不匹配:
const key_id = keys[i].kid; // 增加类型校验,防止非字符串key导致的错误 if (typeof key_id === 'string') { pems[key_id] = pem; }
5. 修正TypeScript配置
检查tsconfig.json关键配置,确保符合target和module要求:
{ "compilerOptions": { "target": "ES6", "module": "CommonJS", "lib": ["ES6", "DOM"], "strict": true, "esModuleInterop": true } }
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

