Технологии: Реакция, машинопись
Я уверен, что это дубликат, но я просто не знаю, как это искать ...
Я хочу создать оболочку для пакета styled-components ...
Справочник по API для пакета, о котором я говорю
Везде, где я создаю компонент, мне нужно вызыватьэто так:
import styled from 'styled-components'
const mydiv = styled.div<WhateverInterface>`
height: 20px;
`
Это единственное место, где я когда-либо видел такую запись, где в конце объявления есть только строка ...
Куда бы я ни прошелреквизит этого конкретного div, чтобы он перезаписал значение по умолчанию, мне нужно сделать что-то вроде этого:
import styled from 'styled-components'
const mydiv = styled.div<WhateverInterface>`
height: ${props => props.height ? props.height : '20px'};
`
Я создал функцию, которая делает это для всех ключей, поэтому я хотел бы создатьоболочка для стиля . [div, select, span и т. д.] ... функция, которая по сути будет вызываться так:
import styled from 'styled-components'
function wrapper(styleComponent, rules) {
return styledComponent`
${props => mergePropsAndDefaultRules(props, rules)}
`
}
const mydiv = wrapper(styled.div<WhateverInterface>, `
height: 20px;
`);
Проблема в том ... Iне знаю, как эта строка, которая появляется в конце styled.div<WhateverInterface>
, работает, ведет себя и т. д.откуда взялись?
Любая информация об этой строковой вещи будет высоко цениться <3 </p>
PS: если неясно, функция, которую я случайно вставил в мой код mergePropsAndDefaultRules
будет работать примерно так:
- Для каждого свойства CSS в каждом из них он будет проверять, существует ли оно в обоих ... если оно существует в обоих, установить для свойства значение в подпорках,если существует только по умолчанию, установите для свойства css значение в правилах по умолчанию, то же самое для реквизита ...
пример:
props = {
height: '30px',
width: '20px',
}
defaultRules = `
height: 20px;
border: 1px solid black;
`
const output = mergePropsAndDefaultRules(props, defaultRules)
console.log(typeof output, output)
/*
Output:
string,
border: 1px solid black;
height: 30px;
width: 20px;
*/