typescript - Beste måte å typisere "makeStyles"


Jeg vet at dette API-et er foreldet/legacy, men jeg er virkelig nysgjerrig på hva som er den beste måten å typifisere denne funksjonen/nytteprogrammet på for å gi typen for props når man bruker funksjonsverdi-callbacks-signatur for å definere egenskaper:

import { createTheme } from '@mui/material';
import { makeStyles } from '@mui/styles';

interface ThemeProps {
  alignItems: boolean;
  themeVersion: 'primary' | 'secondary'
}

const appTheme = createTheme();

const useStyles = makeStyles((theme: typeof appTheme) => {
  return {
    mainContainer: ({ alignItems }: ThemeProps) => ({
      alignItems: alignItems ? 'center' : '',
      height: '100%',
      padding: theme.spacing(2),
    }),
    subContainer: {
      display: 'flex',
      justifyContent: 'center',
      backgroundColor: ({ themeVersion }: ThemeProps) =>
        themeVersion === 'secondary'
          ? theme.palette.secondary.main
          : theme.palette.primary.main,
    },
  };
});

Dette fungerer helt fint, men jeg vil gjerne definere typene helt i begynnelsen for å slippe å spesifisere typen til propene hver gang jeg bruker en funksjonsverdi:

const useStyles = makeStyles<typeof appTheme, ThemeProps>(theme => {
  return {
    mainContainer: ({ alignItems }) => ({
      alignItems: alignItems ? 'center' : '',
      height: '100%',
      padding: theme.spacing(2),
    }),
    subContainer: {
      display: 'flex',
      justifyContent: 'center',
      backgroundColor: ({ themeVersion }) =>
        themeVersion === 'secondary'
          ? theme.palette.secondary.main
          : theme.palette.primary.main,
    },
  };
});

problemet her er at returtypen til useStyles ikke lenger er det jeg trenger, i stedet for å være ClassNameMap<"mainContainer" | "subContainer">, er verdien den er «standardisert» til ClassNameMap<string>.

Noen idé om hvordan man kan få det til å fungere uten å måtte ty til noe som

makeStyles<typeof appTheme, ThemeProps, 'mainContainer' | 'subContainer'>