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

TypeScript中如何用tsc实现类似Go的编译时变量功能?

TypeScript通过tsc实现编译时变量的方案

TypeScript原生的tsc编译器并没有像Go的ldflags那样直接支持编译时注入变量的功能,但可以通过以下几种方式模拟实现,无需依赖Webpack这类构建工具:

1. 预编译脚本生成常量文件

这是最直观的实现方式:

  • 编写一个简单的Node.js脚本,在执行tsc前运行,读取Git提交哈希、构建时间戳等需要的信息,生成一个TypeScript常量文件,比如src/build-info.ts:
    export const BUILD_COMMIT = "a1b2c3d";
    export const BUILD_TIMESTAMP = "2024-05-20T12:34:56Z";
    
  • 在项目代码中直接导入该文件使用:
    import { BUILD_COMMIT } from './build-info';
    console.log(`当前版本提交哈希:${BUILD_COMMIT}`);
    
  • 在package.json的脚本中串联执行流程:
    "scripts": {
      "prebuild": "node scripts/generate-build-info.js",
      "build": "tsc"
    }
    

2. 环境变量结合TypeScript类型声明

借助Node.js环境变量,配合TypeScript的类型声明来实现:

  • 在项目中添加类型声明文件(比如src/env.d.ts),声明环境变量的类型:
    declare namespace NodeJS {
      interface ProcessEnv {
        BUILD_COMMIT: string;
        APP_VERSION: string;
      }
    }
    
  • 在代码中直接读取环境变量:
    console.log(`提交哈希:${process.env.BUILD_COMMIT}`);
    
  • 编译前注入环境变量并执行tsc,Unix系统下可这样写:
    BUILD_COMMIT=$(git rev-parse --short HEAD) tsc
    
    Windows系统用set命令:
    set BUILD_COMMIT=git rev-parse --short HEAD && tsc
    
    也可以用cross-env包实现跨平台统一设置:
    cross-env BUILD_COMMIT=$(git rev-parse --short HEAD) tsc
    

3. 第三方转换器扩展tsc功能

使用第三方插件如ts-transformer-define,实现类似宏定义的编译时变量注入:

  • 安装依赖:
    npm install ts-transformer-define typescript ttypescript --save-dev
    
  • 修改tsconfig.json配置插件:
    {
      "compilerOptions": {
        "plugins": [
          { "transform": "ts-transformer-define", "defines": { "BUILD_COMMIT": "\"a1b2c3d\"" } }
        ]
      }
    }
    
  • 用ttypescript替代tsc执行编译(它会加载自定义转换器):
    BUILD_COMMIT=$(git rev-parse --short HEAD) ttsc
    
  • 代码中直接使用定义好的常量:
    console.log(BUILD_COMMIT);
    

总结来说,原生tsc没有直接的编译时变量注入能力,但通过预生成常量文件、环境变量结合类型声明,或者第三方转换器,都可以实现类似Go的编译时变量效果。

内容的提问来源于stack exchange,提问作者Henrik Aasted Sørensen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:00:58