所有样式化的组件都返回任何 (@types/styled-components)

Posted

技术标签:

【中文标题】所有样式化的组件都返回任何 (@types/styled-components)【英文标题】:All styled components return any (@types/styled-components) 【发布时间】:2020-11-28 14:04:19 【问题描述】:

在将样式组件与 VSCode 一起使用时,我遇到了一个奇怪的问题。下面基本上是我从样式组件中得到的任何组件,它们都返回任何。

我之前让它工作过,但不知道什么时候,我看不出设置中有什么问题来为所有组件返回任何内容。我试图回到 tslint 配置,删除/注释掉 eslintrc 文件中的所有规则,但也无法正常工作。

令人惊讶的是,我尝试了用于我的项目的starter kit,并且其中的类型与原始设置一起使用。

我尝试使用相同版本的 styled-components 包,但仍然无法使用。非常欢迎任何帮助或解决此问题的方向!

.eslintrc.js

module.exports = 
  env: 
    browser: true,
    es6: true,
  ,
  extends: [
    'plugin:@typescript-eslint/recommended',
    'plugin:@typescript-eslint/recommended-requiring-type-checking',
    'plugin:react/recommended',
    'prettier/@typescript-eslint',
  ],
  parser: '@typescript-eslint/parser',
  parserOptions: 
    project: './tsconfig.json',
    sourceType: 'module',
    ecmaFeatures:  jsx: true ,
  ,
  plugins: ['@typescript-eslint', 'react', 'react-native'],
  rules: 
    camelcase: 'off',
    'react/display-name': 'off',
    'react/prop-types': 'off',
    '@typescript-eslint/ban-ts-ignore': 'off',
    '@typescript-eslint/camelcase': 'off',
    '@typescript-eslint/explicit-function-return-type': 'off',
    '@typescript-eslint/interface-name-prefix': 'off',
    '@typescript-eslint/no-explicit-any': 'off',
    '@typescript-eslint/no-use-before-define': 'off',
    '@typescript-eslint/no-unused-vars': ['error',  argsIgnorePattern: '^_' ],
    '@typescript-eslint/no-non-null-assertion': 'off',
    '@typescript-eslint/unbound-method': 'off',
    '@typescript-eslint/no-unsafe-assignment': 'off',
    '@typescript-eslint/no-unsafe-call': 'off',
    '@typescript-eslint/no-unsafe-member-access': 'off',
    '@typescript-eslint/no-unsafe-return': 'off',
    '@typescript-eslint/no-misused-promises': [
      'error',
      
        checksVoidReturn: false,
      ,
    ],
    '@typescript-eslint/explicit-module-boundary-types': ['error',  allowArgumentsExplicitlyTypedAsAny: true ],
  ,
  settings: 
    react: 
      pragma: 'React',
      version: 'detect',
    ,
  ,
  ignorePatterns: ['node_modules/**/*', 'docs/**/*', 'examples/**/*', 'lib/**/*'],
;

tsconfig.json


  "compilerOptions": 
    "allowSyntheticDefaultImports": true,
    "baseUrl": "./src",
    "experimentalDecorators": true,
    "inlineSources": true,
    "jsx": "react",
    "lib": ["es2017", "dom"],
    "module": "commonjs",
    "moduleResolution": "node",
    "noEmit": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "plugins": [
      
        "name": "typescript-styled-plugin",
        "lint": 
          "validProperties": [
            "shadow-color",
            "shadow-opacity",
            "shadow-offset",
            "shadow-radius",
            "padding-horizontal",
            "padding-vertical",
            "margin-vertical",
            "margin-horizontal",
            "tint-color",
            "aspect-ratio",
            "elevation"
          ]
        
      
    ],
    "resolveJsonModule": true,
    "skipLibCheck": true,
    "sourceMap": true,
    "sourceRoot": "./src",
    "strict": true,
    "strictPropertyInitialization": false,
    "suppressImplicitAnyIndexErrors": true,
    "target": "es2015"
  ,
  "include": [".eslintrc.js", "src/**/*.ts", "src/**/*.tsx"]

"lint": "yarn format && yarn eslint && yarn stylelint",
"eslint": "tsc -p . --noEmit --skipLibCheck; eslint --fix 'src/**/*.ts,tsx'",
...
"@typescript-eslint/eslint-plugin": "3.8.0",
"@typescript-eslint/parser": "3.8.0",
"eslint": "7.6.0",
"eslint-config-prettier": "6.11.0",
"eslint-plugin-react": "7.20.5",
"eslint-plugin-react-native": "3.8.1",

styled.d.ts

import 'styled-components';

declare module 'styled-components' 
  // tslint:disable-next-line
  export interface DefaultTheme 
    darkMode: boolean;
    background: string;
    lightBackground: string;
    grayBackground: string;
    darkBackground: string;
    heading: string;
    subheading: string;
    copy: string;
    stroke: string;
    underlay: string;
    map: string;
  

【问题讨论】:

嗨@jbr,你找到解决方案了吗?我也有同样的问题... 没有,我还没有找到任何解决方案,有空再挖掘一下 同样的问题 :( 我已经尝试了很多 Typescript/styled-components/@types/styled-components 版本的组合,但都没有运气。 我无法解释如何,但它又可以工作了。我运行最新版本的 vscode、样式化组件和 eslint 依赖项。不确定发生了什么,但可能是产生此问题的依赖项的内部问题。 糟糕。一直希望有解决办法。我的项目中确实有一些较旧的eslint 依赖项存在这个问题,所以我将通过一个新的linting 设置开始,看看这是否是根本原因。很高兴你把它修好了! 【参考方案1】:

这就是我解决它的方法 - 导航到项目中 styled-components 的类型文件后,我看到了这个错误:node_modules/hoist-non-react-statics/index"' has no exported member 'NonReactStatics'. ts

原来我的包使用的是旧版本的提升非反应静态,它覆盖了样式组件使用的类型。

升级这些包(在我的例子中是 react-redux)解决了这个问题。

【讨论】:

谢谢!!!在我的例子中,它是 recompose 模块。【参考方案2】:

Types 悄悄地转移到了@types/styled-components-react-native。当然,更新您的其他依赖项仍然很好:)

参考:https://github.com/styled-components/styled-components/issues/2099

【讨论】:

以上是关于所有样式化的组件都返回任何 (@types/styled-components)的主要内容,如果未能解决你的问题,请参考以下文章

通过 Provider 将自定义 props 传递给每个样式化的组件

样式化的组件添加组件名称作为类名

如何聚焦样式化的组件?

样式化的组件和范围

React 和 Typescript,样式化的组件和子组件

样式化的组件继承不起作用