Reactjs 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

您好,我有一个useHooks可以使用localStorage进行交换,但我开始使用typescript,键入代码时遇到困难

我的主题类型:

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是一个函数,它接受被分解的参数。