Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Vue 3 defineProps with Types and ComponentObjectPropsOptions (like default or validator)

From within a setup method, using defineProps I can use

const props = defineProps<{tabs: Tab[]}> = ()

which allows me to have the type Tab[] on props.tabs

however, if I want to specify ComponentObjectPropsOptions, I believe the syntax is

const props = defineProps = ({
  type: Array, //can not use Tab[] here
  required: true,
  validator: ...
})

but with that syntax I lose my type on props.tabs :(

like image 673
stackoverfloweth Avatar asked Feb 02 '26 12:02

stackoverfloweth


2 Answers

You'll need to use the PropType utility to type cast your array.

https://vuejs.org/api/utility-types.html#proptype-t

const props = defineProps({
  tabs: {
    type: Array as PropType<Tab[]>,
    required: true,
    validator: ...
  },
})

Or use type only prop declarations by passing the type for your props as the generic to defineProps rather than passing a props object as an argument.

const props = defineProps<{
  tabs: Tab[]
}>()
like image 103
Craig Harshbarger Avatar answered Feb 04 '26 01:02

Craig Harshbarger


Nuxt3, setup, lang=ts

import {ComponentObjectPropsOptions} from "vue";

interface Props {
  foo: string
  bar?: number
}

const props = defineProps<ComponentObjectPropsOptions<Props>>({
  foo: {
    type: String, 
    required: true,
    validator(value: unknown): boolean {
      return true
    }
  },
  bar: Number
})
like image 27
Daniel Avatar answered Feb 04 '26 01:02

Daniel



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!