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

将Next.js+MUI项目转TS时,TSC因Props交叉类型崩溃求助

解决MUI BoxProps与自定义Props交叉导致TSC冻结的问题

问题根源

BoxProps本身已经内置了sx: SxProps类型字段,手动在自定义Props中重复声明sx会导致交叉类型出现重复的复杂属性。TypeScript类型检查器需要处理大量冲突类型的合并逻辑,进而引发性能瓶颈,甚至出现实时类型检查停止、TSC冻结的情况。

修正方案

移除自定义Props中的sx声明,直接复用BoxProps中已有的sx类型定义,避免类型重复:

import { Box, BoxProps } from '@mui/material'
import type React from 'react'

type Props = {
  onSubmit: (e: React.FormEvent) => void
  children: React.ReactNode
} & BoxProps

export const Form = ({ onSubmit, ...props }: Props) => {
  const handleSubmit = (e: React.FormEvent) => {
    e.preventDefault()
    onSubmit(e)
  }

  return (
    <Box
      component="form"
      onSubmit={handleSubmit}
      {...props}
    />
  )
}

额外优化提示

如果需要强制children为必填属性,建议通过Required工具类型基于BoxProps来声明,保持类型与MUI的一致性:

type Props = {
  onSubmit: (e: React.FormEvent) => void
} & Required<Pick<BoxProps, 'children'>> & Omit<BoxProps, 'children'>

这种写法既保留了BoxProps的所有属性,又强制children字段为必填项,避免手动声明可能带来的类型不一致问题。

内容的提问来源于stack exchange,提问作者xandert.93

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 12:47:45