Nuxt.js中如何为通过useAsyncData获取的defineModel添加类型定义?
Nuxt.js中如何为通过useAsyncData获取的defineModel添加类型定义?
嘿,我来帮你搞定这个类型定义的问题!其实核心就是把后端返回的数据类型和defineModel的类型对应起来,步骤很清晰:
首先,你得先明确从/api/trackers/:id接口返回的数据结构,先定义对应的TypeScript接口,方便后续复用:
// 可以放在~/types/tracker.ts文件里 export interface Tracker { id: string; userId: string; // 这里补充你接口实际返回的其他字段,比如name、createdAt之类的 }
接下来在组件里,用useAsyncData获取数据的时候,直接给$fetch指定返回类型,这样useAsyncData的data就会自动带上准确的类型提示:
<script setup lang="ts"> import type { Tracker } from '~/types/tracker'; const route = useRoute(); // 获取后端数据,明确类型是Tracker | null(匹配你的接口返回逻辑) const { data: fetchedTracker } = useAsyncData('tracker', async () => { const trackerId = route.params.id as string; return await $fetch<Tracker | null>(`/api/trackers/${trackerId}`); }); // 给defineModel指定对应的类型,初始值设为null和接口返回逻辑对齐 const trackerModel = defineModel<Tracker | null>({ default: null }); // 当数据获取到后,把值同步到model里 watch(fetchedTracker, (newTracker) => { if (newTracker) { trackerModel.value = newTracker; } }); </script>
这里有几个关键点要注意:
- 一定要让useAsyncData的返回类型和defineModel的类型保持一致,不然会出现类型不兼容的报错
- 如果你的接口确保一定会返回有效数据(不会返回null),那可以把类型改成纯
Tracker,不用加| null - 要是你在组件里需要修改model的字段,TypeScript会帮你做实时类型校验,比如不小心给
userId赋值成数字,编辑器会立刻提示错误,避免运行时问题
这样一来,不管是获取数据还是绑定model,都有完整的类型提示和校验啦!
备注:内容来源于stack exchange,提问作者Samball
相关产品推荐
相关产品推荐

