React-Native-Styled-Components:类型“DefaultTheme”上不存在属性“backgroundColor”

克里希纳

我正在为我的应用程序使用 react-native-Typescript。我的样式组件版本是 "styled-components": "^5.3.0". 我已经创建自定义ThemeProvider并包装到我的根应用程序。我为我的应用程序切换了深色主题。我的ThemeProvider工作正常。我可以制作DarkThemeLightTheme但是当我使用此命令测试我的应用程序 Typescript 时yarn tsc我收到打字稿错误:error TS2339: Property 'backgroundColor' does not exist on type 'DefaultTheme'.在 styled-components 中,它说Create a declarations file,但它用于 version: v4.1.4我正在使用“^5.3.0”`。我真的不知道如何消除这个 Typescript 错误。

这是我的主题颜色和类型

export interface Theme {
  backgroundColor: string;
  primary: string;
  text: string;
  error: string;
}

export const lightTheme: Theme = {
  backgroundColor: '#FFFFFF',
  primary: '#512DA8',
  text: '#121212',
  error: '#D32F2F',
};

export const darkTheme: Theme = {
  backgroundColor: '#121212',
  primary: '#B39DDB',
  text: '#FFFFFF',
  error: '#EF9A9A',
};

export type TTheme = typeof lightTheme;

这是我的主题提供者

import React, {useState, useEffect, useCallback, createContext} from 'react';
import {ThemeProvider as SCProvider} from 'styled-components/native';

import {lightTheme, darkTheme} from 'local/theme'; // I am imported the theme


interface ThemeContext {
  theme: string;
  toggleTheme: (value: string) => void;
}

interface ThemeProviderProps {
  children: JSX.Element;
}

export const ThemeContext = createContext<ThemeContext>({} as ThemeContext);

const ThemeProvider = ({children}: ThemeProviderProps) => {
  const [theme, setTheme] = useState('light');

  const toggleTheme = (value: string) => {
    if (value) {
      setTheme(value);

    }
  };

  const checkForLocalThemeSetting = useCallback(async () => {
    if (localTheme && localTheme !== theme) {
      setTheme(localTheme);
    }
  }, [theme]);

  useEffect(() => {
    checkForLocalThemeSetting();
    // eslint-disable-next-line react-hooks/exhaustive-deps
  }, []);

  return (
    <ThemeContext.Provider value={{theme, toggleTheme}}>
      <SCProvider theme={theme === 'dark' ? darkTheme : lightTheme}>
        {children}
      </SCProvider>
    </ThemeContext.Provider>
  );
};

export default ThemeProvider;

这是将我的主题提供程序扭曲到我的根项目

  <NavigationContainer>
      <StatusBar barStyle="dark-content" />
      <SafeAreaProvider>
        <LocalizationProvider>
          <ThemeProvider>
            <Tab.Navigator>
              <Tab.Screen name="Home" component={HomeScreen} />
              <Tab.Screen name="Settings" component={SettingsScreen} />
            </Tab.Navigator>
          </ThemeProvider>
        </LocalizationProvider>
      </SafeAreaProvider>
    </NavigationContainer>

在这个组件中,我正在测试我的明暗

import React, {useContext} from 'react';
import {ScrollView, StyleSheet, Text, Switch} from 'react-native';

import styled from 'styled-components/native';

import {ThemeContext} from 'local/providers/ThemeProvider';


const Home = () => {

  const {theme, toggleTheme} = useContext(ThemeContext);


  return (
    <ScrollView>
      <Wrapper
        style={{}>
        <Text >Hello world</Text>
      </Wrapper>
      <Switch
        trackColor={{false: '#767577', true: '#81b0ff'}}
        thumbColor={theme === 'dark' ? '#f5dd4b' : '#f4f3f4'}
        ios_backgroundColor="#3e3e3e"
        onValueChange={i => {
          if (i) {
            toggleTheme('dark');
          } else {
            toggleTheme('light');
          }
        }}
        value={theme === 'dark'}
      />
    </ScrollView>
  );
};

const Wrapper = styled.View`
  width: 100%;
  height: 100%;
  overflow: hidden;
  background-color: ${({theme}) => theme.backgroundColor}; // Typescript error: error TS2339: Property 'backgroundColor' does not exist on type 'DefaultTheme'.
`;


export default Home;
收割者

您需要创建声明文件以初始化您的DefaultTheme类型,如文档中所述。现在你有一个类型,interface Themestyled-component不知道它。在这种情况下,必须在styled-component 中声明类型尝试将此代码段添加到您的主题颜色类型中react.js 示例

import {DefaultTheme} from 'styled-components/native';

declare module "styled-components" {
  export interface Theme {
    backgroundColor: string;
    primary: string;
    text: string;
    error: string;
  }
}

export const lightTheme: DefaultTheme = {
  backgroundColor: "#FFFFFF",
  primary: "#512DA8",
  text: "#121212",
  error: "#D32F2F"
};

export const darkTheme: DefaultTheme = {
  backgroundColor: "#121212",
  primary: "#B39DDB",
  text: "#FFFFFF",
  error: "#EF9A9A"
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

属性“ render”在类型“ typeof __React”上不存在

Realm React Native-需要迁移:属性“ emailAddresses”的目标类型“字符串”不存在

react-native不存在捆绑包URL

React Styled-Components:参考其他组件

React Styled Components-如何访问原始HTML

styled-components表示在您的React组件(Component)周围包装了styled()

React native:如果不存在JSON对象,如何忽略

React Native Maps错误-“ AIRMap”的本地组件不存在

React Native:“:CFBundleIdentifier”,不存在

跳过不存在的对象(过滤)React-Native

React-类型IntrinsicAttributes上不存在属性

nextjs + react-native-web + styled-components:warnOnce

React native:安装react-native-maps后不存在android文件夹

类型'EventTarget'上不存在属性'value'。React.SyntheticEvent <HTMLElement>中不存在“值”

类型“ {}”上不存在属性“背景”-React Router模态

属性“ FC”在类型“ typeof React”上不存在

React Styled-Components CSS向子元素添加!important

属性“名称”在类型“ EventTarget”上不存在-React + TypeScript

React Native'setState'不存在?

React Native 和 AppHub:不存在捆绑 URL

React Styled-Components 传递道具问题

如何将 React Functional Component 属性的类型设置为 Styled Component`styled.div`?

带有 TypeScript 的 React Native 中的“对象”类型不存在属性

将 calc() 与 react-native 和 styled-components 一起使用时出错

React Native TextInput 属性在类型“IntrinsicAttributes & IInput”上不存在

react-konva:“从不”类型上不存在属性

react-native useRoute 钩子:类型“对象”上不存在属性“.....”

REACT 上的“FirebaseApp”类型不存在属性“auth”

React Native & Firestore:属性“auth”在类型“typeof/错误对象未知”上不存在