Type checking condition(v-if) in template - Vue Typescript
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
Đú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
#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é
slot name trong vue á bạn