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

如何使用TypeScript仅转译指定平台对应的目标代码文件?

解决方案

你当前的写法属于TS语法层面的重复声明错误,和exclude配置无关。exclude仅控制哪些文件不输出到编译结果,但入口文件中同时导入两个导出同名变量的文件,TS静态检查阶段就会直接报错。

推荐用原生TS路径别名+多编译配置的方案实现需求,无额外依赖,完全符合按需输出单一平台代码的要求,实现步骤如下:

步骤1:修改入口文件导入逻辑

把code.ts里的双平台导入改为统一的无平台后缀的导入路径:

// code.ts
import Logger from './platform-logger';
Logger();

步骤2:配置基础tsconfig.json

在原有配置的基础上新增baseUrl配置,用于路径别名解析:

{
  "compilerOptions": {
    "baseUrl": "./", // 新增这行,作为路径别名的解析根目录
    "target": "ES2017",
    "module": "commonjs",
    "outDir": "./dist",
    "rootDir": "./src",
    "strict": true,
    "alwaysStrict": true,
    "typeRoots": ["./node_modules/@types"],
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  }
}

步骤3:新增平台专属编译配置

分别创建两个平台的tsconfig,继承基础配置,通过paths把统一导入路径映射到对应平台的实现文件,同时排除另一平台的代码:

Mac平台配置(tsconfig.darwin.json)

{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "paths": {
      "./platform-logger": ["./src/code.darwin.ts"]
    }
  },
  "exclude": ["**/*.windows.ts"]
}

Windows平台配置(tsconfig.windows.json)

{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "paths": {
      "./platform-logger": ["./src/code.windows.ts"]
    }
  },
  "exclude": ["**/*.darwin.ts"]
}

步骤4:按平台执行编译

编译Mac平台代码执行:
tsc -p tsconfig.darwin.json

编译Windows平台代码执行:
tsc -p tsconfig.windows.json

方案优势

  • 完全使用原生TS能力,无需引入额外构建工具
  • 无运行时判断逻辑,编译产物完全不含另一平台的冗余代码
  • 类型检查完全正常,不会出现类型丢失或冲突问题

内容的提问来源于stack exchange,提问作者Qwert Trewq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:06:01