Prop type define of Vue3.
npm install vue-prop
<script setup lang="ts">
import { prop, emitType } from "vue-prop";
export const drawerProps = {
visible: prop.boolean.def(false).isRequired,
title: prop.string
};
export const drawerEmits = {
open: emitType<(value: boolean) => void>()
};
const props = defineProps(drawerProps);
const emit = defineEmits(drawerEmits);
</script>
<script lang="ts">
import { defineComponent } from 'vue';
import { prop, emitType } from 'vue-prop';
export const drawerProps = {
visible: prop.boolean.def(false).isRequired,
title: prop.string
};
export const drawerEmits = {
open: emitType<(value: boolean) => void>(),
};
export default defineComponent({
name: 'Drawer',
props: drawerProps,
emits: drawerEmits,
setup(props, { emit }) {
return {}
},
});
</script>
import { prop } from 'vue-prop';
interface Person {
name: string;
sex?: string;
age: number;
}
const props = {
name: prop.stringNumber.def('123').isRequired,
//{type:[String,Number],required:true,default:123}
test: prop.string,
//{type:String}
titles: prop.array<Person>().valid((value) => value.length > 0),
//{type:Array as PropType<Array<Person>>,validator:(value) => value.length > 0}
content: prop.vNode,
//{type:[Object,String] as PropType<VNode|null|string>}
style: prop.css.def({ height: '20px' }),
//{type: Object as PropType<StyleValue>,default:{ height:'20px' }}
};
property | default type | example |
---|---|---|
string | string | prop.string |
number | number | prop.number.def(7) |
stringNumber | string Ι number | prop.stringNumber |
boolean | boolean | prop.boolean |
symbol | symbol | prop.symbol |
date | date | prop.date |
vNode | vue.VNode Ι string Ι null | prop.vNode |
css | vue.StyleValue | prop.css |
object | Record<string, any> | prop.object<{name?:string,age?:number}>() |
array | Record<string, any>[] | prop.array<{name:string}>() |
function | ()=>void | prop.function<(value?:number)=>boolean>() |
literal | undefined | prop.literal<'ok'Ι'cancel'>() |
<script setup lang="ts">
import { prop } from "vue-prop";
type Button = "ok" | "cancel" | 0 | true;
const props = defineProps({ button: prop.literal<Button>() });
</script>
<script setup lang="ts">
import { emitType } from "vue-prop";
export const drawerEmits = {
open: emitType<(value: boolean) => void>()
};
const emit = defineEmits(drawerEmits);
</script>
import { propType } from "vue-prop";
const props = {
title: propType<string | boolean>([String, Boolean]),
user: propType<string | { name?: string, age?: number }>([String, Object]),
color: propType<string | number, "red" | "blue" | 1 | 2>([String, Number])
};