Skyroc Admin Docs
内部配置包

@skyroc/tsconfig

7 个分场景的 TypeScript 编译预设(base / library / node / web / RN / 应用变体)

概览

包名@skyroc/tsconfig
目录internal/tsconfig
版本1.0.0
private
内容7 个 JSON 预设,无 JS 源码

@skyroc/tsconfig 提供分场景的 TypeScript 编译预设。所有包通过 extends 引用对应预设,避免重复维护 compilerOptions。

7 个预设

文件适用场景关键 options
base.json所有 TS 包共同基线stricttarget: ESNextmoduleResolution: bundlerverbatimModuleSyntax: true
library.json发布到 npm 的库包extends base,declaration: trueemitDeclarationOnly: true
node.jsonNode 工具 / 脚本包moduleResolution: nodetypes: ["node"]
web.jsonWeb 端包(含 DOM lib + 测试)DOM lib、jsx: react-jsx、vitest globals
web-app.jsonWeb 应用extends web,额外 types:vite/clientunplugin-icons@skyroc/types@skyroc/web-admin-theme
react-native.jsonRN 库包RN 类型 + JSX
react-native-app.jsonRN 应用extends react-native,应用级 types

引用方式

// apps/admin/tsconfig.json
{
  "extends": "@skyroc/tsconfig/web-app.json",
  "compilerOptions": {
    "paths": {
      "@/*": ["./src/*"],
      "~/*": ["./*"]
    }
  }
}
// packages/@core/utils/tsconfig.json
{
  "extends": "@skyroc/tsconfig/library.json",
  "include": ["src", "__tests__"]
}
// packages/@core/scripts/tsconfig.json
{
  "extends": "@skyroc/tsconfig/node.json"
}

关键 base 配置(节选)

Option作用
stricttrue全部严格模式
targetESNext不降级,Vite / esbuild 处理
moduleESNextESM-first
moduleResolutionbundler现代 bundler 解析
verbatimModuleSyntaxtrue强制 import typeexport type(避免运行时副作用)
noUncheckedIndexedAccesstrue数组/对象 indexed access 自动加 | undefined
skipLibChecktrue加速类型检查

verbatimModuleSyntax

这个选项是项目 TS 风格的关键约束之一——任何只用于类型的 import 必须用 import type

// ❌ 编译报错
import { SomeType } from './types';

// ✅ 必须显式 type
import type { SomeType } from './types';

// ✅ 也可以混合
import { someValue, type SomeType } from './module';

好处:

  • 编译产物不会因为类型 import 引入运行时副作用;
  • Bundler 可以更精准地 tree-shake;
  • 与 Oxlint 的 typescript/consistent-type-imports 规则配合。

应用层 types 注入

web-app.jsontypes 字段额外加入:

  • vite/clientimport.meta.env 类型
  • unplugin-icons~icons/* 模块声明
  • @skyroc/types — 全局 ApiRouterApp namespace
  • @skyroc/web-admin-theme — 全局 Theme namespace

应用代码可以直接用 Api.Auth.UserInfoTheme.ColorPaletteFamily 等而不需要 import。

exports 字段

{
  "exports": {
    "./base.json": "./base.json",
    "./library.json": "./library.json",
    "./node.json": "./node.json",
    "./web.json": "./web.json",
    "./web-app.json": "./web-app.json",
    "./react-native.json": "./react-native.json",
    "./react-native-app.json": "./react-native-app.json"
  }
}

每个 JSON 显式暴露子路径,避免 tsc 解析 extends 失败。

新建包的标准 tsconfig

包类型extends备注
Web 应用@skyroc/tsconfig/web-app.json+ paths
Web 库 / 组件@skyroc/tsconfig/web.jsonlibrary.json视是否需要 DOM lib
Node 工具@skyroc/tsconfig/node.json
跨端库@skyroc/tsconfig/library.json不绑 DOM
RN 应用@skyroc/tsconfig/react-native-app.json

详见 新建包流程

On this page