Appearance
defineProps 和 defineEmits
本节目标:理解“defineProps 和 defineEmits”的核心思路,并能把它用于实际开发或面试表达。 在
\<script setup\>中必须使用defineProps和defineEmitsAPI来声明props和emits,它们具备完整的类型推断并且在\<script setup\>中是直接可用的:
<script setup>
const props = defineProps({
foo: String,
});
const emit = defineEmits(["change", "delete"]);
// setup code
</script>defineProps和defineEmits都是只在\<script setup\>中才能使用的编译器宏。他们不需要导入且会随着\<script setup\>处理过程一同被编译掉。defineProps接收与props选项相同的值,
defineEmits也接收emits选项相同的值。
defineProps和defineEmits在选项传入后,会提供恰当的类型推断。传入到
defineProps和defineEmits的选项会从setup中提升到模块的范围。因此,传入的选项不能引用在setup范围中声明的局部变量。这样做会引起编译错误。但是,它_可以_引用导入的绑定,因为它们也在模块范围内。在设置属性默认值时,可以使用imprort的值和全局变量,不能使用局部变量;
如果使用了 Typescript,使用纯类型声明来声明 prop 和 emits 也是可以的。
