使用打字稿时属性“主题”不存在

Ger*_*elt 3 themes typescript reactjs material-ui

我正在使用带有 material-ui v1.x beta 的 typescript 创建一个 ReactJS 入门项目。

在以下位置解释的主题:https : //material-ui-1dab0.firebaseapp.com/customization/themes/ 不起作用。打字稿抱怨属性“主题”不存在。我一直在摆弄 @types/material-ui 中的 index.d.ts 将界面“muiTheme”替换为“theme”,这导致了很多其他错误。

当使用 'muiTheme' 属性时,错误消失了,但是只使用了默认颜色,表明我的自定义主题根本没有使用。

我的代码:

import * as React from 'react';
import { MuiThemeProvider } from 'material-ui/styles';
import createMuiTheme from 'material-ui/styles/theme';
import createPalette from 'material-ui/styles/palette';
import { teal, bluegrey, red } from 'material-ui/colors';
import Button from 'material-ui/Button';

const theme: any = createMuiTheme({
  palette: createPalette({
    primary: teal, // Purple and green play nicely together.
    accent: {
      ...bluegrey,
      A400: '#00e677',
    },
    error: red,
  }),
});

function Palette() {
  return (
    <MuiThemeProvider theme={theme}>
      <div>
        <Button color="primary">
          {'Primary'}
        </Button>
        <Button color="accent">
          {'Accent'}
        </Button>
      </div>
    </MuiThemeProvider>
  );
}
Run Code Online (Sandbox Code Playgroud)

打字稿:

(21,23): error TS2339: Property 'theme' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes<MuiThemeProvider> & Readonly<{ children?: ReactNod...'.
Run Code Online (Sandbox Code Playgroud)

Bla*_*ett 37

对于在 2020 年遇到类似错误消息的任何人,我的问题是我从 @material-ui/styles 包中导入了 makeStyles。切换到首选的 @material-ui/core/styles 包为您提供正确的类型。

例如。改变:

import { makeStyles } from '@material-ui/styles';

import { makeStyles } from '@material-ui/core/styles';

请参阅讨论首选导入的此 github 问题。我相信前者是在 MUI 3 中引入的,作为他们正在进行的某些样式转换的临时垫片。

  • 这解决了我收到的类似错误,“类型‘DefaultTheme’上不存在属性‘间距’。”。谢了哥们! (7认同)

mjw*_*zor 2

如果您使用的是material-ui V1,那么您不再使用@types,这些类型是随包一起提供的。只需将您的 tsconfig 文件指向"types": "material-ui"并包含node_modules"typeRoots"部分中即可。

例子

"compilerOptions": {
    "typeRoots": [
       "node_modules/@types",
        "node_modules"
    ],
    "types": [
        "node", "jest", "lodash", "react",
        "react-dom", "react-redux", "redux-logger", "material-ui",
        "react-router-dom", "react-router-redux",
        "redux", "binary-type-tree", "redux-form",
        "tedb", "react-tap-event-plugin",
        "react-hot-loader", "material-ui-icons"
    ],
    "outDir": "dist"
},
"include": [
    "src",
    "node_modules/**/*.d.ts",
    "node_modules/@types/**/*.d.ts"
],
Run Code Online (Sandbox Code Playgroud)

这当然会改变你的项目,该项目几乎完全重写,我不得不重新设计我的项目以使用 V1。