我已经通过在TypeScrip中的模块增强将名为fTokens的自定义对象添加到MUI主题

这就是我的theme.d.ts美元的样子

declare module "@mui/material/styles" {
  interface FPalette { ...
  }

  interface FTokens { ...
  }

  interface FSpacing { ...
  }

  interface Theme {
    fPalette: FPalette;
    fTokens: FTokens;
    fSpacing: FSpacing;
  }

  interface ThemeOptions {
    fPalette: Partial<FPalette>;
    fTokens: Partial<Tokens>;
    fSpacing: Partial<FSpacing>;
  }
}

我正在试着通过MUI的定制props rowIdTableRow

import MUITableRow, { TableRowProps as MUITableRowProps } from "@mui/material/TableRow";
import { styled } from "@mui/system";

interface TableRowProps {
  rowId: number;
}

const TableRow = styled(MUITableRow)<TableRowProps>(({ theme }) => ({
  backgroundColor: theme.fTokens.surfaceHigh,
}));

export default TableRow;

我收到的打字错误为Property 'fTokens' does not exist on type 'Theme'.ts(2339)

更新-我try 了使用as关键字的类型断言,但我不知道这是否是解决这个问题的最优雅的方法?

const TableRow = styled(MUITableRow)<TableRowProps>(({ theme, rowId }) => ({
  backgroundColor:
    rowId % 2 === 0
      ? (theme as Theme).fTokens.surfaceHigh
      : (theme as Theme).fTokens.surfaceHighest,
}));

推荐答案

try 从‘@Mui/Material/Style’而不是‘@Mui/System’导入样式

import { styled } from '@mui/material/styles';

DOC:https://mui.com/system/styled/#import-path

Typescript相关问答推荐

如何传递基于TypScript中可变类型的类型?

如何从具有给定键列表的对象类型的联合中构造类型

为什么ESLint抱怨通用对象类型?

无法从应用程序内的库导入组件NX Expo React Native

在TypeScript中使用泛型的灵活返回值类型

类型{...}的TypeScript参数不能赋给类型为never的参数''

如何表示多层深度的泛型类型数组?

使用订阅时更新AG网格中的行

TypeScrip中的类型安全包装类

FatalError:Error TS6046:';--模块分辨率';选项的参数必须是:'; node ';,'; node 16';,'; node

是否可以强制静态方法将同一类型的对象返回其自己的类?

缩小对象具有某一类型的任意字段的范围

为什么在这种情况下,打字脚本泛型无法正确自动完成?

错误TS7030:并非所有代码路径都返回值.";由tsfig.json中的";Strong";:False引起

扩展对象的此内容(&Q;)

如何通过转换器类继承使用多态将对象从一种类型转换为另一种类型

两个名称不同的相同打字界面-如何使其干燥/避免重复?

使用RXJS获取数据的3种不同REST API

redux-toolkit、createAsyncThunk 错误

如何在 ngFor 循环中以Angular 正确动态渲染组件