styled.li<{ menu?: any }>`
Во-первых, к template string literal (
``
) можно применить
функцию-тэг, она будет вызвана с массивом фиксированных строк и интерполируемыми значениями (
`${/* вот этими */ value}`
).
Во-вторых, в TS функция может быть
дженериком (принимать тип в качестве параметра), при вызове функции в дженерик можно передать конкретный тип (например
{ menu?: any }
) или не передавать (тогда дженерик выведется автоматически из аргументов)
В-третьих, так как тегирование template string literal по своей сути вызов функции, то и в него можно явно передавать дженерики.
${({ menu }) =>
menu &&
css
А тут в качестве интерполируемого значения передается
стрелочная функция, в которой
деструктурирован первый аргумент. В данном случае это нормально, так как функция-тег получит данную функцию "как есть", без приведения к строке.