Запретить неиспользуемые свойства объекта

Я использую Typescript и React с Material-UI. Я использую решение для стилизации Material-UI (CSS в JS) в стиле Hook, как описано в их документах:

const useStyles = makeStyles({
  root: {
    background: 'linear-gradient(45deg, #FE6B8B 30%, #FF8E53 90%)',
    border: 0,
    borderRadius: 3,
    boxShadow: '0 3px 5px 2px rgba(255, 105, 135, .3)',
    color: 'white',
    height: 48,
    padding: '0 30px',
  },
});

export default function Hook() {
  const classes = useStyles();
  return <Button className={classes.root}>Hook</Button>;
}

И я хочу, чтобы Eslint обнаруживал, не используется ли свойство объекта classes. Потому что после наличия более 6 свойств (правил CSS) становится довольно сложно определить, какие из них используются или используются ли они когда-либо. Я пробовал eslint-plugin-unicorn с их no-unused-properties правилом, хотя он мог обнаруживать неиспользуемые свойства в объекте, если объект был объявлен и одно из его свойств было доступно с помощью точечной нотации:

const styles = {
    success: { … },
    danger: { … } // <- Property `danger` is defined but never used
};

console.log(styles.success)

Но в первом примере кода, где я передаю объект в качестве аргумента другой функции и еще несколько шагов, он не может определить, используются ли свойства classes, который теперь является объектом со свойствами стиля, или нет. Я хочу понять, почему это так и в чем причина? (Я также новичок в Typescript) Я был бы признателен за объяснение того, почему линтер не может предупредить меня о неиспользуемых свойствах в объекте classes в первом примере. Заранее спасибо.


person vazhin    schedule 28.01.2021    source источник


Ответы (2)


В вашем случае вам придется использовать пакет npm eslint-plugin-unicorn. в котором есть нужное вам правило no-unused-properties

person hendrixchord    schedule 29.01.2021

Вы можете создать собственное правило в соответствии с вашими требованиями.

Вот документ:

person teliu    schedule 31.03.2021