You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中扩展process对象属性遇ts(2339)错误:gitInfo不存在于Process类型

问题原因与解决方案

核心问题

你错误地扩展了全局Process接口,但TypeScript中,process对象对应的内置类型是NodeJS.Process,直接扩展Process不会关联到process实例的类型,所以触发报错。另外如果声明文件没被TypeScript正确识别,也会导致类型不生效。

解决步骤

1. 修正全局类型声明

把代码改成扩展NodeJS.Process接口:

declare global {
  namespace NodeJS {
    interface Process {
      gitInfo: {
        GIT_COMMIT_DATE?: string;
        GIT_COMMIT_HASH?: string;
        GIT_BRANCH?: string;
        GIT_COMMIT_MESSAGE?: string;
      };
    }
  }
}

// 此时再使用process.gitInfo就不会报错
const gitInfo = process.gitInfo;

2. 确保声明文件被TypeScript检测到

  • 将这段代码保存为.d.ts后缀的文件,比如src/global.d.ts或者src/types/git.d.ts
  • 检查tsconfig.json的include配置,确保包含该文件所在目录:
{
  "include": ["src/**/*"]
}

3. 匹配Webpack DefinePlugin配置

注意Webpack的DefinePlugin会直接替换代码,所以要把gitInfo对象序列化为字符串注入:

const { execSync } = require('child_process');
const webpack = require('webpack');

// 提取Git信息
const getGitMeta = () => {
  try {
    return {
      GIT_COMMIT_DATE: execSync('git log -1 --format=%cd').toString().trim(),
      GIT_COMMIT_HASH: execSync('git rev-parse --short HEAD').toString().trim(),
      GIT_BRANCH: execSync('git rev-parse --abbrev-ref HEAD').toString().trim(),
      GIT_COMMIT_MESSAGE: execSync('git log -1 --format=%B').toString().trim(),
    };
  } catch (err) {
    console.warn('无法获取Git信息:', err);
    return {};
  }
};

module.exports = {
  // ...其他Webpack配置
  plugins: [
    new webpack.DefinePlugin({
      'process.gitInfo': JSON.stringify(getGitMeta()),
    }),
  ],
};

内容的提问来源于stack exchange,提问作者Stav Alfi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 09:25:09