Yêu cầu thg 1 5, 2023 2:04 CH 117 0 2
  • 117 0 2
+2

Type checking condition(v-if) in template - Vue Typescript

Chia sẻ
  • 117 0 2

Xin chào mọi người !!!

Mình vừa thấy 1 thắc mắc là mình có 2 prop iconName như bên dưới và mình có 1 component Button

interface TabProps {
  icon?: IconName;
  iconPosition?: 'left' | 'right';
}
const props = withDefaults(defineProps<TabProps>(), {
  icon: undefined,
  iconPosition: 'left',
});

Viết như này sẽ lỗi

 <Button :variant="tabVariant" :color="tabColor" :class="tabClasses" @click="handleChangeTab">
    <template v-if="icon" #leftIcon>
      <Icon :name="icon" width="18" height="18" />
    </template>
    <slot />
  </Button>

Mình thắc mắc ở chỗ là:

Nếu dùng v-if như này <template v-if="icon" #leftIcon>

=> Error: Type 'IconName | undefined' is not assignable to type 'IconName'.

Còn nếu mà mình dùng v-if như này v-if="icon" => Thì không có lỗi, nhưng thế này nó sẽ render 1 empty tag

2 CÂU TRẢ LỜI


Đã trả lời thg 1 6, 2023 6:37 SA
0

Mình nghĩ lỗi do :name không nhận giá trị undefined đó bạn.

Chia sẻ
thg 1 6, 2023 12:20 CH

Đúng vậy icon có thể là IconName or undefined

Nhưng rõ ràng khi bạn check if như vậy thì bên trong template thì làm gì có thể xảy ra icon = undefined

Mình đang thắc mắc là <template> không render trên dom mà check như vậy thì không đúng

Avatar meos meos @manhle
thg 1 7, 2023 4:51 SA

Bạn thử xem câu trả lời này xem. link

Đã trả lời thg 1 6, 2023 10:01 SA
0

#leftIcon để làm gì vậy bạn
Nếu chưa fix được thì bạn đẩy code lên codesandbox or stackblitz để mình xem qua nhé

Chia sẻ
thg 1 6, 2023 12:20 CH

slot name trong vue á bạn

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí