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

MUI Joy SelectProps泛型报错:需传入1-2个类型参数

解决@mui/joy SelectProps泛型类型参数错误

问题原因

@mui/joy的SelectProps是泛型类型,要求传入1-2个类型参数,分别对应选项的类型和选中值的类型(第二个参数可选),直接使用SelectProps而不指定类型参数会触发TS报错。

具体修复方案

根据业务场景,常见修复方式如下:

1. 选项值为字符串类型(通用场景)

给SelectProps传入string类型参数,适配普通下拉选择需求:

import "./Select.styles.scss";
import JoySelect from "@mui/joy/Select";
import { SelectProps } from "@mui/joy";
import { ArrowDown2 } from "iconsax-react";

// 指定string类型参数
const Select = (props: SelectProps<string>) => {
  const required_star = props?.required === true ? <span className="requiredStar">*</span> : "";
  console.log(props.title, props.value);
  return (
    <div className="select-container">
      <p className="title">
        {props?.title} {required_star}
      </p>
      <JoySelect
        {...props}
        fullWidth
        indicator={<ArrowDown2 size={18} color="#90A0B7" />}
        sx={{
          height: 40,
          borderColor: "#334D6E",
          padding: "0px 10px",
          width: "100%",
        }}
        placeholder={`Select ${props.title}`}
        variant="outlined"
      />
    </div>
  );
};

Select.defaultProps = {
  size: "small",
  fullWidth: true,
};

export default Select;

2. 自定义选项对象类型

若下拉选项是带label和value的对象,先定义选项类型再传入:

// 定义自定义选项类型
type SelectOption = {
  label: string;
  value: string | number;
};

// 将自定义类型传入SelectProps
const Select = (props: SelectProps<SelectOption>) => {
  // 原有代码逻辑
};

3. 明确指定选中值的类型

如果选项类型和值类型不一致(比如选项是对象,值是对象的ID),可传入两个类型参数:

// 第一个参数为选项类型,第二个为选中值类型
const Select = (props: SelectProps<SelectOption, number>) => {
  // 原有代码逻辑
};

补充说明

@mui/joy的Select组件更侧重类型安全,通过泛型强制约束选项和值的类型;而@mui/material的SelectProps默认有类型参数兜底,这是切换组件后出现差异的核心原因。

内容的提问来源于stack exchange,提问作者George Maher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:07:08