我有一个下拉组件和 prop ,你可以通过一个数组或字符串,它将用于从我的Pinia商店获得一个数组。我试着创建一个类型,它允许两个选项中的任何一个,看起来像这样:
type Union<T, U> = (T & Partial<U>) | (U & Partial<T>)
我在VSCode中这样使用它,没有任何错误:
type PropsStore = { store: string }
type PropsArray = { array: any[] }
type StoreOrArray = Union<PropsArray, PropsStore>
const props = defineProps<StoreOrArray>()
但在页面上Vite显示我这个错误:[plugin:vite:vue] [@vue/compiler-sfc] Unresolvable type reference or unsupported built-in utility type
都在同一个页面上,我试过改变类型和类型参数的名称,它对任何其他对象都有效,唯一有效的是像这样替换它:
type StoreOrArray = (PropsStore & Partial<PropsArray>) | (PropsArray & Partial<PropsStore>)
我想这很好,但如果我想重复使用它,这很烦人。
所以我想这肯定是和defineProps有关,但是我不明白为什么我做的方式不起作用。可能有一个很好的解释,但当我用谷歌搜索它时,几乎没有搜索结果,所以如果有一个例如YouTube上的视频,这将是非常有帮助的
其他信息(请询问是否有我没有列出的相关信息):
- Vue 3.3.4(最新)
- Nuxt 3.5.3(最新版)
- 节点18.13.0
- 使用实验性的defineModel宏,删除它,仍然不工作
1条答案
按热度按时间ppcbkaq51#
Vue目前不支持泛型类型(vue@3.3.4)
(问题https://github.com/vuejs/core/issues/8482)
(有PR https://github.com/vuejs/core/pull/8511)
唯一支持的是通过TS入侵
参见https://github.com/vuejs/core/blob/main/packages/compiler-sfc/src/script/resolveType.ts#L528