!!
двойной удар является ошибкой, он не приводит к ошибке, поскольку допускается использование нескольких операторов, но это бесполезно, необходимо использовать один ненулевой оператор утверждения !
.
В производстве это должно решаться с помощью средств защиты типов, чтобы не вызывать ошибки при компиляции и во время выполнения:
if (tree)
expect(tree.toJSON()).toMatchSnapshot();
Но в тестовой среде предпочтительно иметь ошибку во время выполнения, потому что утверждение должно потерпеть неудачу, если оно не соответствует ожиданиям, поэтому это идеальный вариант использования для !
ненулевого утверждения:
expect(tree!.toJSON()).toMatchSnapshot();
Можно изменить типы, чтобы сделать некоторые свойства необязательными:
type ButtonType = ButtonHTMLAttributes<HTMLButtonElement>;
type ButtonTypeWithOnClick = ButtonType & Required<Pick<ButtonType, 'onClick'>>;
const buttonProps = tree.root.findByType('button').props as ButtonTypeWithOnClick;
buttonProps.onClick({} as React.MouseEvent<HTMLButtonElement, MouseEvent>);
Но результат многословен, это идеальный вариант использования для !
для одноразового утверждения, что также делает намерение более ясным.