动态样式表属性访问的类型问题

Posted

技术标签:

【中文标题】动态样式表属性访问的类型问题【英文标题】:Type issues with Dynamic StyleSheet property access 【发布时间】:2020-12-01 23:39:39 【问题描述】:

我创建了一个带有浅色和深色主题样式的 React Native 功能组件。

const lightThemeOverrides = StyleSheet.create( <light_override_styles_here> );
const styles = StyleSheet.create( <styles_here> );

我正在尝试借助函数在我的代码中使用它们:

const themedStyles = (key: string) => 
  if (props.theme === 'light') 
    return  ...styles[key], ...lightThemeOverrides[key] ;
   else 
    return styles[key];
    
;

我在我的 JSX 中这样使用这个函数:&lt;View style=themedStyles('popup')&gt;

但我的 ts linter 在抱怨,Element implicitly has an 'any' type because type ' popup: backgroundColor: string; ; text: color: string; ; ' has no index signature.

知道如何解决这个问题吗? 我们将不胜感激所有提示。

【问题讨论】:

【参考方案1】:

我目前的解决方案是像这样修改themedStyles 函数:

const themedStyles = (key: 'popup' | 'text'): StyleProp<any> => 
  if (props.theme && props.theme === 'light') 
    return  ...styles[key], ...lightThemeOverrides[key] ;
   else 
    return styles[key];
    
;

密钥的类型为'popup' | 'text' 或类似。在lightThemeOverrides StyleSheet 中包含每个可能的键。

我还将函数的类型设置为 StyleProp&lt;any&gt; 以修复 JSX 中的更多类型问题。

虽然我不喜欢这个解决方案,因为必须为每个组件更改功能,但它确实可以。目前。任何进一步的 cmets 仍然欢迎:)

【讨论】:

以上是关于动态样式表属性访问的类型问题的主要内容,如果未能解决你的问题,请参考以下文章

哪个 JavaScript 框架可以搜索 CSS 样式表规则并编辑它们的属性?

Vue3样式引入和使用

css样式表怎么用啊

Wordpress 资源解释为样式表,但使用 mime 类型 text/html 传输

JS 动态修改CSS 样式方法/全局

从useEffect动态呈现样式表?