support `required` property