Обновление: При дальнейшем расследовании выясняется, что @Vincent был на правильном пути, прежде чем я выяснил, что на самом деле происходит.
import styled, { CSSObject } from "styled-components";
const Container = styled.div({
userSelect: "none !important"
} as CSSObject);
Сгенерирует следующую ошибку:
Conversion of type '{ userSelect: "none !important"; }' to type 'CSSObject' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.
Type '{ userSelect: "none !important"; }' is not comparable to type 'Properties<string | number>'.
Types of property 'userSelect' are incompatible.
Type '"none !important"' is not comparable to type '"contain" | "all" | "-moz-initial" | "inherit" | "initial" | "revert" | "unset" | "auto" | "none" | "text" | "-moz-none" | "element" | undefined'.ts(2352)
Итак, стилизованные компоненты действительно поддерживают этот синтаксис даже в TypeScript, просто не понимают суффикс !important
.Вот немного измененное решение, которое вы могли бы предпочесть:
const important = <T extends string>(s: T): T => `${s} !important` as T;
const Container = styled.div({
userSelect: important("none"),
});
Это немного странно (приведение "none !important"
к "none"
, когда это явно не так), но оно сохраняет ваши стилизованные CSS-реквизиты чистыми и пропускаетпроверки типов.
Оригинальный ответ: Я не знаком с этим синтаксисом для стилизованных компонентов (он немного похож на JSS, но не совсем).
Я бы рекомендовал использовать стандартный синтаксис.Стилизованные компоненты обычно пишутся так:
const Container = styled.div`
user-select: none !important;
`;