代码之家  ›  专栏  ›  技术社区  ›  Leon Gaban

Typescript样式化组件错误:“Type'{children:string;}'没有与类型'IntrinsificatAttributes'相同的属性。“

  •  0
  • Leon Gaban  · 技术社区  · 6 年前

    键入{children:string;}没有与类型“IntrinsificatAttributes”相同的属性。ts(2559)

    import React from 'react'
    
    import { NotificationSuccess, NotificationError } from '../../styles'
    
    interface IProps {
      error?: boolean;
      message: string;
    }
    
    export const Notification = (props: IProps) => {
      const Note = () => props.error ? NotificationError : NotificationSuccess;
      // Error happens on <Note>
      return (<Note>{props.message}</Note>);
    }
    

    以及样式:

    import styled from 'styled-components';
    
    export const NotificationDiv = styled.div`
      z-index: 11;
      position: fixed;
      left: 50%;
      margin-left: -160px;
      top: 1rem;
      padding: 1.5rem;
      width: 320px;
      height: auto;
      text-align: center;
      color: ${props => props.theme.offWhite};
      border-radius: 5px;
      cursor: pointer;
    `
    
    export const NotificationSuccess = styled(NotificationDiv)`
      background: ${props => props.theme.green};
    `
    
    export const NotificationError = styled(NotificationDiv)`
      background: ${props => props.theme.red};
    `
    

    enter image description here

    我在这里找到了这个答案,并将package.json升级到以下版本,但仍然没有帮助:

    Why this wrapped styled-component errors "has no properties in common with"

    "styled-components": "4.0.3",
    "@types/styled-components": "4.0.3",
    "babel-plugin-styled-components": "^1.10.0",
    

    完整包.json

    {
      "name": "",
      "version": "2.0.0",
      "main": "index.js",
      "scripts": {
        "dev": "next -p 7777",
        "build": "next build",
        "start": "next start -p 8000",
        "test": "NODE_ENV=test jest --watch --no-cache",
        "test-win": "SET NODE_ENV=test&& jest --watch"
      },
      "license": "ISC",
      "dependencies": {
        "@zeit/next-sass": "^1.0.1",
        "@zeit/next-typescript": "^1.1.1",
        "axios": "^0.18.0",
        "decko": "^1.2.0",
        "downshift": "^2.2.3",
        "enzyme": "^3.6.0",
        "enzyme-adapter-react-16": "^1.5.0",
        "graphql": "^14.0.2",
        "graphql-tag": "^2.9.2",
        "graphql-tools": "^4.0.0",
        "lodash.debounce": "^4.0.8",
        "next": "^7.0.2",
        "next-routes": "^1.4.2",
        "node-sass": "^4.11.0",
        "nprogress": "^0.2.0",
        "prop-types": "^15.6.2",
        "ramda": "^0.26.1",
        "react": "^16.7.0",
        "react-adopt": "^0.6.0",
        "react-dom": "^16.7.0",
        "react-redux": "^6.0.0",
        "react-transition-group": "^2.5.0",
        "redux-devtools-extension": "^2.13.8",
        "redux-thunk": "^2.3.0",
        "styled-components": "4.0.3",
        "tslint": "^5.12.1",
        "tslint-react": "^3.6.0",
        "typescript": "^3.2.4",
        "waait": "^1.0.2"
      },
      "devDependencies": {
        "@babel/plugin-proposal-decorators": "^7.3.0",
        "@babel/preset-typescript": "^7.1.0",
        "@types/enzyme": "^3.1.15",
        "@types/jest": "^23.3.13",
        "@types/next": "^7.0.6",
        "@types/ramda": "^0.25.49",
        "@types/react": "^16.7.20",
        "@types/react-dom": "^16.0.11",
        "@types/react-redux": "^7.0.1",
        "@types/styled-components": "4.0.3",
        "@types/zeit__next-typescript": "^0.1.1",
        "babel-core": "^7.0.0-bridge.0",
        "babel-jest": "^24.1.0",
        "babel-plugin-sass-vars": "^0.2.1",
        "babel-plugin-styled-components": "^1.10.0",
        "casual": "^1.5.19",
        "enzyme-to-json": "^3.3.4",
        "jest": "^24.1.0"
      },
      "jest": {
        "setupTestFrameworkScriptFile": "<rootDir>/jest.setup.js",
        "testPathIgnorePatterns": [
          "<rootDir>/.next/",
          "<rootDir>/node_modules/"
        ],
        "transform": {
          ".*": "babel-jest",
          "^.+\\.js?$": "babel-jest",
          "^.+\\.ts?$": "babel-jest",
          "^.+\\.tsx?$": "babel-jest"
        },
        "moduleFileExtensions": [
          "js",
          "json",
          "ts",
          "tsx"
        ],
        "modulePaths": [
          "<rootDir>/components/",
          "<rootDir>/pages/",
          "<rootDir>/shared/"
        ]
      }
    }
    
    
    1 回复  |  直到 6 年前
        1
  •  7
  •   Devansh J    6 年前

    <Note>{props.message}</Note> 与相同 Note({ children: props.message }) 所以typescript在抱怨这个函数 Note 不接受任何参数且函数类型不匹配。它与样式化组件无关。

    ( IntrinsicAttributes

    const Note = props.error ? NotificationError : NotificationSuccess; 而不是你写的。

    顺便说一句,我可能错了,但我很肯定这是事实。

        2
  •  15
  •   user4920718    5 年前

       <DeliverNow>
    
            </DeliverNow>
    

    const DeliverNow = () => {}
    

    Typescript会告诉你它们不匹配,因为事实上,DeliverNow需要一些道具

    所以在实际意义上,它的本意是

    const DeliverNow = (props:any) => {}
    
        3
  •  0
  •   Pablo    5 年前

    键入{children:string;}没有与类型“IntrinsificatAttributes”相同的属性。ts

    我发现了一个伟大的解决方案,它与typescript或样式化组件无关。

    只需通过 React.createElement

    例如:

    const Title: React.SFC<TitleProps> = ({ tag, styled, children }) =>
      React.createElement(tag, { ...styled }, children);
    
    const TitleStyled = styled(Title)`Your styled`