Передать массив объектов в поддержку стиля в React и TypeScript

В JavaScript React я бы сделал это, чтобы «объединить» несколько стилей:

const customStyle= {
    fontWeight: 'bold'
};

<p 
    style = {[{fontStyle: 'italic'}, customStyle]}>
    {Some Text....}
</p>

Однако, когда я пробую это в проекте TypeScript React, я получаю следующее:

TS2322: Type '({ fontWeight: string; } | { fontStyle: string; })[]' is not assignable to type 'Properties<string | number, string & {}>'.
   Types of property 'filter' are incompatible.
     Type '{ <S extends { fontWeight: string; } | { fontStyle: string; }>(predicate: (value: { fontWeight: string; } | { fontStyle: string; }, index: number, array: ({ fontWeight: string; } | { fontStyle: string; })[]) => value is S, thisArg?: any): S[]; (predicate: (value: { ...; } | { ...; }, index: number, array: ({ ...; } ...' is not assignable to type 'Filter | undefined'.

Эта конструкция массива очень удобна, потому что важен порядок элементов. С помощью customStyle я мог перезаписать все, что я определил в объекте {fontStyle: 'italic'} до...

Как мне передать несколько стилей в style prop HTML-элемента?

Я никогда не видел, чтобы это использовалось. У вас есть страница, описывающая это использование?

vera. 10.01.2023 18:33

@вера. Я делаю это в React-Native все время. Вот один онлайн-пример, который это делает newline.co/30-days-of-react-native/…. Я предположил, что это возможно и в React. Но видимо это не так :)

four-eyes 10.01.2023 21:42
Что такое двойные вопросительные знаки (??) в JavaScript?
Что такое двойные вопросительные знаки (??) в JavaScript?
Как безопасно обрабатывать неопределенные и нулевые значения в коде с помощью Nullish Coalescing
Асинхронная передача данных с помощью sendBeacon в JavaScript
Асинхронная передача данных с помощью sendBeacon в JavaScript
В современных веб-приложениях отправка данных из JavaScript на стороне клиента на сервер является распространенной задачей. Одним из популярных...
Принципы ООП в JavaScript
Принципы ООП в JavaScript
Парадигма объектно-ориентированного программирования имеет 4 основных принципа,
Laravel с Turbo JS
Laravel с Turbo JS
Turbo - это библиотека JavaScript для упрощения создания быстрых и высокоинтерактивных веб-приложений. Она работает с помощью техники под названием...
Слишком много useState? Давайте useReducer!
Слишком много useState? Давайте useReducer!
Современный фронтенд похож на старую добрую веб-разработку, но с одной загвоздкой: страница в браузере так же сложна, как и бэкенд.
Типы данных JavaScript
Типы данных JavaScript
В JavaScript существует несколько типов данных, включая примитивные типы данных и ссылочные типы данных. Вот краткое объяснение различных типов данных...
0
2
60
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам нужно будет уменьшить массив до одного объекта:

style = {[{fontStyle: 'italic'}, customStyle].reduce((carry, current) => ({ ...carry, ...current}), {})}
Ответ принят как подходящий

Почему вы не используете операторы распространения? так:

style = {{fontStyle: 'italic', ...customStyle}}

Ваши стили также будут перезаписаны таким образом

Другие вопросы по теме