您好,我是打字稿的新手,但是我对情感的使用主题有以下疑问 我有此代码:
const GlobalStyle: React.FC = (props) => {
const Theme = useTheme();
return (
<Global
styles={css`
@import url('https://fonts.googleapis.com/css?family=Poppins&display=swap');
@import url('https://fonts.googleapis.com/css?family=Roboto&display=swap');
body > #emasa > div {
height: 100vh;
}
* {
padding: 0;
margin: 0;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
*:focus {
outline: 0;
outline: none;
}
a {
text-decoration: none;
color: inherit;
cursor: pointer;
}
button {
background-color: transparent;
color: inherit;
border-width: 0;
padding: 0;
cursor: pointer;
}
figure {
margin: 0;
}
input::-moz-focus-inner {
border: 0;
padding: 0;
margin: 0;
}
ul,
ol,
dd {
margin: 0;
padding: 0;
list-style: none;
}
h1,
h2,
h3,
h4,
h5,
h6 {
margin: 0;
font-size: inherit;
font-weight: inherit;
}
p {
margin: 0;
}
cite {
font-style: normal;
}
fieldset {
border-width: 0;
padding: 0;
margin: 0;
}
body {
background: ${Theme.colors.background};
color: ${Theme.colors.text};
transition-duration: 0.4s;
transition-property: background-color, color;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto',
'Oxygen', 'Ubuntu', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
}
`}
/>
);
};
但是我明白了:
对象的类型为“未知”。ts(2571)
所以我在使用useTheme的const主题时遇到哪种类型的问题
我知道问题在于声明主题的类型,但是我对解决此问题的正确方法有疑问。
答案 0 :(得分:1)
这是我修复它的方式:
import '@emotion/react';
declare module '@emotion/react' {
export interface Theme {
colors: {
blue: string[];
gray: string[];
primary: string;
secondary: string;
background: string;
white: string;
};
space: string[];
border: {
radius: string;
};
}
}
我的 tsconfig.json 看起来像这样:
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"lib": ["DOM"],
"jsx": "preserve",
"noEmit": true,
"isolatedModules": true,
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"jsxImportSource": "@emotion/react"
},
"include": ["src/**/*"],
"exclude": ["node_modules", "public", ".cache", "gatsby*"]
}
特定于 Emotion 的唯一配置是指定的 jsxImportSource here
就是这样。
答案 1 :(得分:0)
我是通过以下方式完成的
const theme = {
text: '#000000',
backgroundColor: '#ff0000',
};
type Theme = typeof theme;
const GlobalStyle: React.FC = (props) => {
const Theme = useTheme<Theme>();
return (
<Global
styles={css`
...
`}
/>
);
};