当前位置: 首页 > article >正文

Vue3.0 + Ts:动态设置style样式 ts 报错

error TS2322: Type ‘{ width: string; left: string; ‘background-color’: unknown; ‘z-index’: number; }’ is not assignable to type ‘StyleValue’

在这里插入图片描述

在这里插入图片描述

在 vue3.0 + ts 项目中,动态设置样式报错

在 Vue 3 + TypeScript 项目中,当你使用 :style 绑定样式时,Vue 会期望你提供的对象符合其 StyleValue 类型。这个类型通常是一个对象,其属性值可以是字符串(表示 CSS 属性值)、数字(表示像素值,通常用于 top、left 等属性,但 Vue 也会自动将它们转换为字符串)、或者其他 Vue 接受的样式值。

错误信息 TS2322 表示你返回的对象类型与 StyleValue 类型不兼容。这通常发生在以下情况之一:

1、属性值类型不匹配:你提供的属性值类型不是 Vue 期望的类型。
2、使用了 Vue 不识别的 CSS 属性:虽然这不太可能是你的情况,因为 width、left、background-color 和 z-index 都是有效的 CSS 属性。
3、TypeScript 类型定义问题:可能是你的项目中 TypeScript 的类型定义与 Vue 的期望不符。

在你的代码中,有几个可能的问题点:

1、‘background-color’: props.barColor[index]:这里 props.barColor[index] 的类型可能是 unknown,如果 props.barColor 的类型定义不够具体。你需要确 props.barColor 是一个包含有效颜色值的数组。
2、showValue.value[index] 和 showValue.value[index - 1]:你需要确保这些值的类型是正确的,并且 changeToRate 函数返回的是一个数字,因为你在模板中将它用作百分比。
3、changeToRate 函数的返回类型:确保这个函数返回的是一个数字。

为了解决这个问题,你可以:

1、明确 props.barColor 的类型:

interface Props {
  barColor: string[]; // 确保这里的类型是 string[],或者更具体地,比如 ColorTypes[],其中 ColorTypes 是一个包含有效 CSS 颜色值的类型
}

const props: Props = defineProps<{ /* ...其他 props ... */ barColor: string[] }>();

2、确保 changeToRate 返回数字:

function changeToRate(value: number): number {
  // ...你的逻辑,确保返回一个数字
}

3、如果 showValue.value 是响应式的,确保它是正确的类型:

const showValue = reactive<{ [index: number]: number }>([]); // 或者其他适当的类型定义

4、在 getBarStyle 函数中,你可以为返回值提供一个更具体的类型:

function getBarStyle(index: number): { [key: string]: string | number } {
  // ...你的逻辑
  return {
    width: `${currentRate}%`,
    left: `${preRate}%`,
    'background-color': props.barColor[index] as string, // 如果 TypeScript 不能自动推断出 string 类型,你可以使用类型断言
    'z-index': 99 - index,
  };
}

注意,这里我使用了 { [key: string]: string | number } 作为返回类型,这是 Vue 通常期望的样式对象类型的一个宽松版本。然而,在实际应用中,Vue 通常只接受字符串作为样式值(除了像 z-index 这样的少数属性,它们可以接受数字),所以更严格的类型定义可能是 { [key in keyof CSSProperties]: string }(需要导入 CSSProperties 类型),但在这个例子中,由于我们使用了模板字符串和减法操作,所以数字类型也是必要的。

以上是我查文心一言给的答案,非常准备,就是改下申明,能让代码感知到 得到的数值就是对应类型就行

function getBarStyle(index: number) {
  const preValue: number = showValue.value[index - 1] || 0;
  const currentValue: number = showValue.value[index] - preValue;
  const preRate: number = changeToRate(preValue);
  const currentRate: number = changeToRate(currentValue);
  const color: string = props.barColor[index] || '';
  return {
    width: `${currentRate}%`,
    left: `${preRate}%`,
    'background-color': color,
    'z-index': 99 - index,
  }
}

这是改过后的,这样就不报错了


http://www.kler.cn/a/400893.html

相关文章:

  • 基于Java Springboot外卖平台系统
  • Windows docker下载minio出现“Using default tag: latestError response from daemon”
  • 机器学习(西瓜书)-BP神经网络实现
  • 黑马智数Day10
  • Nature Communications 基于触觉手套的深度学习驱动视触觉动态重建方案
  • 如何进入python交互界面
  • 数据库审计工具--Yearning 3.1.9普民的使用指南
  • 卡尔曼滤波学习资料汇总
  • Spring Security 核心组件
  • ArcGIS Pro ADGeoDatabase DAML
  • Git提交时如何排除bin、obj目录
  • 新手小白学习docker第六弹------Docker常规安装(安装tomcat、mysql、redis)
  • 鸿蒙NEXT自定义组件:太极Loading
  • 使用 Keras 训练一个循环神经网络(RNN)
  • Spring MVC前后端数据传输项目实践
  • 【nginx】client timed out和send_timeout的大小设置
  • Python模块、迭代器、正则表达式
  • redis服务启动windows客户端操作 (双开)
  • ETH钱包地址如何获取 如何购买比特币
  • PHP Switch 语句
  • Python模块、迭代器与正则表达式day10
  • 红日靶场-1详细解析(适合小白版)
  • 如何理解AGI是具备普通人类所有认知能力的通用 AI
  • 沃丰科技呼叫中心质检:定义、重要性及选择策略
  • C++设计模式:工厂方法模式
  • 软件Bug和缺陷的区别是什么?