Require emit to be compulsory in Vue when using the composition API

After creating a Vue SFC component, I want to make sure that the event handleClose is defined. Here is the current sample code:

// Component.vue
const emit = defineEmits<{
  (e: "handleClose"): void;
}>();

type Props = { isOpen: boolean };
defineProps<Props>();

When trying to use <Component />, an error occurs due to the missing prop isOpen, but there is no complaint about the absence of @handle-close.

I am looking for a way to enforce this check and display a warning if @handle-close is not defined.

Answer №1

When the @foo event listener is compiled as a onFoo prop on the vnode, it can be verified within the internal component instance like this:

function validateEmits(...eventNames) {
  let props;

  if (import.meta.env.DEV && (props = getCurrentInstance()?.vnode.props)) {
    for (const name of eventNames) {
      const propName = 'on' + toPascalCase(name);
      if (typeof props[propName] !== 'function')
        console.warn(name + ' event listener is not present');
    }
  }

  return eventNames;
}

You can use it in the following way:

const emits = defineEmits(['foo', bar']);
validateEmits('foo');

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

simulated xhr server along with the locales in polymer appLocalizeBehavior

Currently, I am in the process of developing a web frontend utilizing Polymer. Within my web component, I incorporate various other components such as paper-input or custom web components. To facilitate testing for demonstration purposes, I have integrated ...

Having trouble implementing the FCKeditor in a Zend form

I am trying to integrate FCKeditor with my form by downloading the CKeditor library from Although everything seems to be working fine, I keep encountering the following error: ReferenceError: ReferenceError: CKeditor is not defined Here is the JavaScri ...

Navigating through asynchronous transactions in Node.js: A Guide

My application utilizes Nodejs, Mongodb, and amqp. The main module receives messages from amqp, processes them by saving message information into mongodb within a message transaction, and executes additional logic. function messageReceiverCallback(msg) { ...

methods for dynamically assigning values to keys while iterating over an object

Hey there, I've encountered a problem that I need help with: I have an object containing keys and values, and I want to create a new array of objects using this data. Below is the code snippet illustrating my issue. const sourceObj = { test1: "a ...

Ways to verify the identity of a user using an external authentication service

One of my microservices deals with user login and registration. Upon making a request to localhost:8080 with the body { "username": "test", "password":"test"}, I receive an authentication token like this: { "tok ...

Issue with Angular4 select in dropdown not able to trigger onChange event

I am new to working with Angular 4 and I am currently in the process of building something. In my project, I have multiple components, one of which contains the following HTML code: <div class="row" style="border:1px solid black;"> <br> <d ...

What is the reason behind obtaining a distinct outcome when logging the properties of an object compared to logging the object itself and checking its properties?

Currently, I am working on integrating socket-io with react redux and encountering a peculiar namespace problem. console.log(socket); console.log(socket.disconnected); console.log(socket.id); console.log(socket); The first log displays a comprehensive ob ...

Generating unique ObjectIDs for each object is crucial before saving documents in Mongoose

I need to generate a unique ObjectID for every object within my array. The challenge is that I am fetching products from another server using a .forEach statement and adding them to my array without a Schema that automatically creates an ObjectID.... Prod ...

Establish height and width parameters for creating a dynamic and adaptable bar chart with recharts

I am currently facing an issue with recharts while trying to implement a BarChart. The setting width={600} and height={300} is causing the Barchart to be fixed in size, rather than responsive. How can I make the BarChart responsive? I attempted using per ...

How to choose the nth item from various lists using JQUERY

It's not possible to achieve this using pure css because nth-of-type only selects based on an element's parent relationship (w3schools). Therefore, I am seeking a jquery alternative that can be applied across multiple lists. HTML: <div class ...

What is the best way to retrieve an object based on a custom key type in TypeScript when using a

I have a custom class called Foo: class Foo { constructor(public v: any) { } } And I have a map where Foo is my Key: const map = new Map<Foo, string>(); As far as I know, TypeScript does not support comparison overloading. How can I ensure ...

leveraging telerik ui in asp.net mvc with vue.js

Has anyone had experience using vue.js in conjunction with Telerik UI for ASP.Net MVC, specifically excluding the Kendo UI controls? I am interested in examples that demonstrate how to utilize v-bind and v-model with these controls. For instance, when it ...

Ways to determine if a browser is currently loading a fresh webpage

I'm experiencing an issue with my web app where the 'safety' code triggers a page reload if the server (Socket.IO) connection becomes silent for more than 5 seconds, often due to customer site firewall or broken-proxy issues. Although the S ...

Using Wordpress with Gravity Forms Ajax and Swup JS for dynamic form submissions

For page transitions and AJAX content changes, I have implemented swup.js. However, Gravity forms is not properly handling the AJAX request and the form stops working after transitioning. To reinitialize my scripts upon page load, I am using the following ...

React blogging site's administrative dashboard

https://i.sstatic.net/M6fUJ.png I am currently in the process of developing a blogging platform using MERN technology. Specifically, I am focused on creating a restful API with Node.js, Express, and MongoDB. The frontend, built with React, consists of thr ...

The $geoNear operator must be the initial stage in a pipeline to be valid

When performing an aggregation using nodejs as the server-side language, I encountered the error message $geoNear is only valid as the first stage in a pipeline. This is the Aggregation Object: [ { '$geoNear': { near: [Object], distanceFie ...

I am receiving an undefined value when using document.getElementsByClassName

<canvas id="can" height="500px" width="1200px"></canvas> <div class="name"> <h1>LEONARDO</h1> </div> <script> var name=['WATSON','LEONARDO',"SMITH","EMILY"] var counter=0 var dat ...

JavaScript file does not execute onload function

Whenever I try to execute the window.onload function from my .js file, it seems to not be firing as expected. <script type="text/javascript" src="{% static 'jsfile.js' %}"></script> window.onload = function() { alert(' ...

Circle overlapping another circle in an image

Initially, let me explain what I am aiming for. I desire a layout similar to the one below (however, replace the squares with circles): |------------| | |-------| | | | button| | | |-------| | |------------| The concept is to have a button enclosed wi ...

What is the best way to thoroughly uninstall Ionic and Cordova from an Ubuntu system?

Is there a way to completely remove Cordova and Ionic 1 and all of their dependencies from my Ubuntu system? And how can I reinstall them again? I found this blog helpful for installing Ionic and its dependencies: I attempted to uninstall Cordova and Ion ...