vue3 + ts,prop使用PropType校验联合类型的问题?
问题描述
vue3 + ts;在props中使用PropType来验证数据,因为业务中需要自动遍历定义好的表单组件或slot组件,故分别为表单组件和slot组件定义了两个类型。PorpType中传入的类型正是是联合类型FormOptions | SlotOptions
组成的别名 FormItem
,FormOptions
中定义的属性在SlotOptions
中没有,vue模板上校验报错某某字段在SlotOptions
上不存在,如图:
相关代码
interface
export interface FormOptions {
readonly label: string;
readonly name: string;
readonly type: QuickCmp;
config?: any;
defaultValue?: any;
unchecked?: boolean;
rules?: any[];
[key: string]: any;
}
export interface SlotOptions {
slot: boolean;
}
export type FormItem = FormOptions | SlotOptions;
PropType
props: {
formOptions: {
type: Array as PropType<FormItem[]>,
required: true,
}
}
父组件传入的数据
const formOptions: Array<FormItem> = [
{ label: '下拉框2', name: 'select2', type: QuickCmp.Select, defaultValue: [], config: { options: options, multiple: true, isGroup: true } },
{ label: '开关1', name: 'switch2', type: QuickCmp.Switch, defaultValue: false, config: { } },
{ label: '日期1', name: 'date1', type: QuickCmp.Date },
{ slot: true },
{ label: '时间1', name: 'time1', type: QuickCmp.Time, config: { 'is-range': true } },
]
我大概知道原因了,可能是因为没有做类型守卫,可是不知道如何在模板中使用类型守卫
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
花了两个小时瞎摸索,自己找到了方法