Создание нового строкового литерального типа на основе другого - PullRequest
0 голосов
/ 17 июня 2019

CSS.Pseudo-типы csstypes имеют набор CSS-селекторов, таких как: "hover", ": active" и т. Д.

Возможно ли создать новый тип на основе CSS.Pseudo, который принимает все типы CSS.Pseudo, но с '&' впереди?

Например, '&: hover', '&: active' и т. д.

Я хочубыть в состоянии сделать что-то вроде

type CSS.Pseudo = ':hover' | ':active' ... etc.

type CssStyle= { [SOMETHINGSOMETHING CSS.Pseudo]: string}

const styles: CssStyle= {
    '@:hover: someCssString, //OK
    ':hover:  someCssString,  //NOT OK
    '&:hov':  someCssString   //NOT OK
}

Я пробовал миллиард вещей на TS Playground, но мне кажется, что я просто недостаточно хорош в TS, или это просто невозможно.

1 Ответ

0 голосов
/ 18 июня 2019

Вы не можете сделать это программно, по крайней мере, начиная с TypeScript 3.5.

Ранее предлагалось , и предложение закрывалось как дубликат дополнения строкового литерального ключа или проверки правильности строкового литерала регулярного выражения предложение ни один из которых не особенно близок к тому, чтобы быть включенным в язык. Если вы действительно хотите, чтобы это произошло, вы можете обратиться к одному или обоим из этих вопросов и дать им and или, возможно, описать свой вариант использования, если считаете, что он более убедителен, чем тот, который уже есть.

Извините, это не тот ответ, который вам, вероятно, нужен, но, по крайней мере, вы можете перестать пытаться заставить компилятор сделать это за вас. Удачи!

...