Skip to content

Its possible define component with generic type? #2733

@martinsura

Description

@martinsura

What problem does this feature solve?

Hello, first -> thanks for the Vue3. Its Awesome.

In my previous project I often use typescript generic. For example:

const CustomButton = defineComponent({
  props: {
    clickRequest:Function as PropType<(r?: Promise<any>) => void>,
    onClick: Function as PropType<(data:any) => void>
  },
  emits:["click"],
  setup(props, { emit }) {
    const internalClick = async () => {
      const data = await props.clickRequest()
      emit("click",data);
    }
    return () => {
      <button onClick={internalClick}>Action</button>
    }
  }
})

This example works as expected. Problem is any type around props definition.

What does the proposed API look like?

const CustomButton = defineComponent<T>({
  props: {
    clickRequest:Function as PropType<(r?: Promise<T>) => void>,
    onClick: Function as PropType<(data:T) => void>
  },
  emits:["click"],
  setup(props, { emit }) {
    const internalClick = async () => {
      const data = await props.clickRequest()
      emit("click",data as T);
    }
    return () => {
      <button onClick={internalClick}>Action</button>
    }
  }
})

Thanks

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions