Материал пользовательского интерфейса CSS-in-JS

Я настраиваю проект, используя React, React Admin, Babel, TypeScript и Webpack. Я использую редактор VSCode.

Я пытаюсь использовать новое решение для стилей пользовательского интерфейса, а затем API-интерфейс Styled Components.

Я настроил TSLint, поэтому требуется добавить typedef к объявлению переменной.

Когда я пишу следующий код:

const StyledButton = styled(Button)({
  backgroundColor: 'yellow',
  height: 10,
  width: 80,
});

TSLint выдает следующую ошибку: expected variable-declaration: 'StyledButton' to have a typedef (typedef)tslint(1), Обратите внимание, что Button Я перехожу к styled() это компонент из пользовательского интерфейса материала:

import Button from '@material-ui/core/Button';

Когда я тогда наведусь StyledButton Я вижу следующее:

Так что в основном VSCode говорит мне тип StyledButton переменная, которая является React.ComponentType, Так что, если я обновлю свой код до этого:

const StyledButton: React.ComponentType = styled(Button)({
  backgroundColor: 'yellow',
  height: 10,
  width: 80,
});

Я не получаю ошибок вообще. Большой!

Но теперь моя проблема начинается: когда я меняю Button к фактическому элементу HTML button:

const StyledButton: React.ComponentType = styled('button')({
  backgroundColor: 'yellow',
  height: 10,
  width: 80,
});

Мой редактор выдает следующую ошибку:

Type 'ComponentType<never>' is not assignable to type 'ComponentType<{}>'.
  Type 'ComponentClass<never, any>' is not assignable to type 'ComponentType<{}>'.
    Type 'ComponentClass<never, any>' is not assignable to type 'ComponentClass<{}, any>'.
      Types of property 'getDerivedStateFromProps' are incompatible.
        Type 'GetDerivedStateFromProps<never, any> | undefined' is not assignable to type 'GetDerivedStateFromProps<{}, any> | undefined'.
          Type 'GetDerivedStateFromProps<never, any>' is not assignable to type 'GetDerivedStateFromProps<{}, any>'.
            Types of parameters 'nextProps' and 'nextProps' are incompatible.
              Type 'Readonly<{}>' is not assignable to type 'never'

Когда я удаляю typedef и парить над StyledButton снова вижу следующее:

Итак, VSCode говорит мне, что тип изменился на React.ComponentType<never>, Давайте обновим мой код до:

const StyledButton: React.ComponentType<never> = styled('button')({
  backgroundColor: 'yellow',
  height: 10,
  width: 80,
});

И ошибки уходят, приятно! Давайте использовать StyledButton:

<StyledButton>
  I'm a button
</StyledButton>

Это выдает еще одну ошибку:

This JSX tag's 'children' prop expects type 'never' which requires multiple children, but only a single child was provided.ts(2745)

Я делаю что-то не так или? Как я могу правильно ввести StyledButton и не получил ошибки, когда я на самом деле использую компонент?

Я также разместил этот вопрос на GitHub, но, к сожалению, он был закрыт: https://github.com/mui-org/material-ui/issues/14898

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать и заранее спасибо!

0 ответов

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