Получение ошибки машинописного текста в моем стилизованном компоненте
Type '{ children: string; }' has no properties in common with type 'IntrinsicAttributes'.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};
`
Я нашел этот ответ здесь и обновил свой package.json до следующего, но это все равно не помогло:
Почему эти завернутые ошибки стилизованного компонента «не имеют общих свойств с»
"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/"
]
}
}
Пожалуйста, рассмотрите возможность определения функционального компонента как универсального типа на основе интерфейса. например const Уведомление: React.FC<IProps>



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


<Note>{props.message}</Note> такой же, как Note({ children: props.message }), поэтому машинописный текст жалуется, что функция Note не принимает никаких аргументов, а тип функции не совпадает. Это не имеет ничего общего со стилизованными компонентами.
(IntrinsicAttributes, вероятно, является интерфейсом по умолчанию, который вы расширяете, когда пишете функциональный компонент. Или что-то вроде этого idk xD)
Я думаю, вы хотите const Note = props.error ? NotificationError : NotificationSuccess; вместо того, что вы написали.
PS. Я могу ошибаться, но я почти уверен, что это так.
Вы были правы, да, мне не нужна часть = () =>.
Хорошо, как было сказано выше, просто чтобы уточнить, создаете ли вы компонент
<DeliverNow>
</DeliverNow>
он автоматически передает ему реквизиты, и если, когда вы его объявляете
const DeliverNow = () => {}
Typescript скажет вам, что они не совпадают, потому что на самом деле DeliverNow использует некоторые реквизиты.
так что на самом деле это должно быть
const DeliverNow = (props:any) => {}
Я получил эту ошибку:
Type '{ children: string; }' has no properties in common with type 'IntrinsicAttributes'.ts
При динамическом добавлении тегов в моем приложении реакции. Я нашел отличное решение, которое не имеет ничего общего с typescript или styled-components.
Достаточно создать узел через React.createElement
Например:
const Title: React.SFC<TitleProps> = ({ tag, styled, children }) =>
React.createElement(tag, { ...styled }, children);
const TitleStyled = styled(Title)`Your styled`
Чаще всего эта ошибка возникает, когда вы называете свой стилизованный компонент тем же именем, что и функциональный компонент. Просто дайте несколько постфиксов вашим компонентам стиля, таким как ButtonStyled или ButtonContainer, и вы g2g.
Вы пробовали удалить
node_modulesи переустановить?