首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vue3互斥道具

Vue3互斥道具
EN

Stack Overflow用户
提问于 2022-11-24 11:05:22
回答 1查看 25关注 0票数 1

创建一个组件,该组件可以接受jsonjsonParserRules,也可以接受jsonUrljsonParserRulesUrl,但不能同时接受两者。实现这一目标的正确途径是什么。如果IDE支持此检查并打印适当的警告,这将是完美的,以防指定两个道具。

非工作示例

代码语言:javascript
复制
<script setup lang="ts">
type Props = |
{
  json: Object
  jsonParserRules: Object
  jsonUrl?: never
  jsonParserRulesUrl?: never
}
|{
  json?: never
  jsonParserRules?: never
  jsonUrl: string
  jsonParserRulesUrl: string
}

defineProps<Props>()
</script>

<template>
  <pre>some output</pre>
</template>

这个直接的尝试打印错误:[@vue/compiler-sfc] type argument passed to defineProps() must be a literal type, or a reference to an interface or literal type.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-24 12:18:03

这不是一个完美的解决方案,因为您必须将这两个道具放在一起,但它将在VSCode中给出正确的输入错误。

代码语言:javascript
复制
<script setup lang="ts">
type Json = {
  json: Object;
  jsonParserRules: Object;
};
type JsonUrl = {
  jsonUrl: string;
  jsonParserRulesUrl: string;
};
type Props = {
  jsonData: Json | JsonUrl;
};
const props = defineProps<Props>();
</script>

不给VScode类型记录错误:

代码语言:javascript
复制
<TestCompo :json-data="{ jsonUrl: 'foo', jsonParserRulesUrl: 'foo' }" />

给出VScode类型记录错误:

代码语言:javascript
复制
<TestCompo :json-data="{ jsonUrl: 'foo', jsonParserRules: {} }" />
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74559737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档