message: types: fix CropperAvatar props define
diff: </div>
  </template>
  <script lang="ts">
  - import { defineComponent, computed, CSSProperties, unref, ref, watchEffect, watch } from 'vue';
  + import {
  + defineComponent,
  + computed,
  + CSSProperties,
  + unref,
  + ref,
  + watchEffect,
  + watch,
  + PropType,
  + } from 'vue';
  import CopperModal from './CopperModal.vue';
  import { useDesign } from '/@/hooks/web/useDesign';
  import { useModal } from '/@/components/Modal';
  width: { type: [String, Number], default: '200px' },
  value: { type: String },
  showBtn: { type: Boolean, default: true },
  - btnProps: { type: Object as ButtonProps },
  + btnProps: { type: Object as PropType<ButtonProps> },
  btnText: { type: String, default: '' },
  uploadApi: { type: Function as PropType<({ file: Blob, name: string }) => Promise<void>> },
  };
  components: { CopperModal, Icon },
  props,
  emits: ['update:value', 'change'],
  - setup(props, { emit }) {
  + setup(props, { emit, expose }) {
  const sourceValue = ref(props.value || '');
  const { prefixCls } = useDesign('cropper-avatar');
  - const [register, { openModal }] = useModal();
  + const [register, { openModal, closeModal }] = useModal();
  const { createMessage } = useMessage();
  const { t } = useI18n();
  );
  watchEffect(() => {
  - sourceValue.value = props.value;
  + sourceValue.value = props.value || '';
  });
  watch(
  createMessage.success(t('component.cropper.uploadSuccess'));
  }
  + expose({ openModal: openModal.bind(null, true), closeModal });
  +
  return {
  t,
  prefixCls,
  