Reactjs TypeScript主题开关类型错误
您好,我有一个useHooks可以使用localStorage进行交换,但我开始使用typescript,键入代码时遇到困难 我的主题类型:Reactjs TypeScript主题开关类型错误,reactjs,typescript,Reactjs,Typescript,您好,我有一个useHooks可以使用localStorage进行交换,但我开始使用typescript,键入代码时遇到困难 我的主题类型: type colors = { primary: string; secondary: string; background: string; text: string; }; export type ITheme = { type: string; colors: colors; }; export const lightThe
type colors = {
primary: string;
secondary: string;
background: string;
text: string;
};
export type ITheme = {
type: string;
colors: colors;
};
export const lightTheme: ITheme = {
type: 'light',
colors: {
primary: '#fff',
secondary: '#2a2d34',
background: '#FFF',
text: '#333',
},
};
export const darkTheme: ITheme = {
type: 'dark',
colors: {
primary: '#fff',
secondary: '#2a2d34',
background: '#FFF',
text: '#333',
},
};
我的定制挂钩:
import { darkTheme, lightTheme, ITheme } from '../themes/index';
type getInitialTheme = () => ITheme;
export default function useAppTheme(defaultTheme: ITheme = lightTheme) {
const [theme, _setTheme] = useState(getInitialTheme);
function getInitialTheme(): getInitialTheme {
const savedTheme = localStorage.getItem('theme');
if (
JSON.parse(savedTheme) === 'dark' ||
JSON.parse(savedTheme) === 'light'
) {
return JSON.parse(savedTheme) === 'dark' ? darkTheme : defaultTheme;
} else {
return defaultTheme;
}
}
useEffect(() => {
localStorage.setItem('theme', JSON.stringify(theme.type));
}, [theme]);
return {
theme,
setTheme: ({ setTheme, ...theme }) => {
if (theme.type === 'dark') {
return _setTheme(darkTheme);
} else {
return _setTheme(lightTheme);
}
},
};
}
但我在以下函数中遇到错误:
getInitialTheme()
设定主题
在我的getInitialTheme中,我得到了以下信息:
关于我的主题:
函数
getInitialTheme
应返回ITheme
function getInitialTheme(): ITheme
空检查应在之前完成
if (
savedTheme &&
(JSON.parse(savedTheme) === 'dark' || JSON.parse(savedTheme) === 'light'))
看起来它的线型是getInitialTheme=()=>ITheme
这是多余的,也不是必需的,请将方法getInitalTheme return type更改为ITheme您好,我是否需要从useHook键入我的返回?像这样:return{theme,setTheme:({setTheme,…theme})=>{if(theme.type=='dark'){return{setTheme(darkTheme);}else{return{setTheme(lightTheme);}};你能帮我吗?这不是一个返回,setTheme是一个函数,它接受被分解的参数。