【踩坑】TypeScript 中使用 sass 动态设置样式

问题

在从 Vue2 项目转向 Vue3 项目时,不得不将已经封装好的 echarts 图表也升级成 Vue3 适配的版本,遇到了一个有些诡异的问题,在此记录一下。

背景:

在 Vue2 的项目中,为了动态设置 echarts 的相关配置,于是有这样一个文件:

css 复制代码
/* echart theme 主题颜色 字体等 */
$theme:#999999;
//统计图主题色系,主题色系修改,此处应相应修改
$lengendColors:"#409eff","#e6a23c","#67c23a","#d87c7c","#22e4b5","#b6a2de","#e4bc20","#d95850","#74B5F9";
$chartPrimary:rgba(255, 255, 255, 1);
$chartfontSize:12px;
$fontColor:#000000;
$markLineColor:yellow;
$platformColor:#67c23a; //平台类
$projectColor:#e6a23c;  //项目类
$standardColor:#0098d9; //标准工时
$declarationColor:#b6a2de; //申报工时
$chartHeight: 300px;

$success: #67C23A;
$warning: #E6A23C;
$danger: #ED1731;
$info: #909399;

:export {
    theme:$theme;
    lengendColors:$lengendColors;
    chartPrimary: $chartPrimary;
    chartfontSize:$chartfontSize;
    fontColor:$fontColor;
    markLineColor:$markLineColor;
    platformColor:$platformColor;
    projectColor:$projectColor;
    standardColor:$standardColor;
    declarationColor:$declarationColor;
    chartHeight: $chartHeight;
}

本来,我们是可以正常使用的,跑得动,也可以正常打包发布。按照以下方式使用:

javascript 复制代码
import echart from '../theme/theme.scss'

报错

现在,新开了一个 Vue3 项目,在封装 echarts 图表时,依然用了旧项目的那套代码,跑起来一切正常!!!但是呢,一旦打包就会报错!!!报错信息如下:

原因

出现这个错误的原因是,我们在 TypeScript 文件中尝试从 .scss 文件中导入内容,但 TypeScript 并不支持直接从 .scss 文件中导入变量或样式。.scss 文件是用于定义 CSS 样式和变量,而 TypeScript 主要用于定义 JavaScript 的类型和逻辑。

解决方法

可以将 SCSS 变量转换为一个 JavaScript 对象,并在 TypeScript 文件中导入这个对象。这通常需要在构建过程中使用一个工具来提取 SCSS 变量并将其转换为 JavaScript。

例如,可以创建一个 JSON 文件(或 TypeScript 文件),其中包含了所有的样式变量:

javascript 复制代码
{  
  "theme": "#999999",  
  "lengendColors": ["#409eff", "#e6a23c", "#67c23a", "#d87c7c", "#22e4b5", "#b6a2de", "#e4bc20", "#d95850", "#74B5F9"],  
  "chartPrimary": "rgba(255, 255, 255, 1)",  
  "chartfontSize": "12px",  
  "fontColor": "#000000",  
  "markLineColor": "yellow",  
  "platformColor": "#67c23a",  
  "projectColor": "#e6a23c",  
  "standardColor": "#0098d9",  
  "declarationColor": "#b6a2de",  
  "chartHeight": "300px",  
  "success": "#67C23A",  
  "warning": "#E6A23C",  
  "danger": "#ED1731",  
  "info": "#909399"  
}

然后在 TypeScript 文件中导入这个 JSON 文件:

javascript 复制代码
import echart from '../theme/theme.json'

于是!成功解决了问题。

相关推荐
清秋19 分钟前
全网最全 ECMAScript 攻略( 更新至 ES2026)
前端·javascript·编程语言
Cao_Ron37 分钟前
用 SVG image symbol 画 ECharts graph 圆形节点
前端
hxy060141 分钟前
React-Call让你的React组件像异步函数一样调用
前端·react.js
Hilaku42 分钟前
为什么 AI 写前端时,总是优先选择 React,而不是 Vue?
前端·javascript·程序员
京东云开发者44 分钟前
GPT-5.6、ChatGPT Work 与 Codex 更新食用指南
前端
Cao_Ron1 小时前
用 ECharts graph 画出卡片式矩形节点
前端
skiyee1 小时前
换个底座的 Wot Starter 居然让 AI 更懂项目!
前端·ai编程
我命由我123451 小时前
72 法则极简理解
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法
anyup1 小时前
这一套绝了!AI 大模型写故事,星云 SDK 驱动 3D 数字人实时演绎
前端·人工智能·aigc
耀耀切克闹灬1 小时前
短链跳转
前端