diff --git a/src/compile/nodes/EventHandler.ts b/src/compile/nodes/EventHandler.ts
index e426efa79c..ee9db7a850 100644
--- a/src/compile/nodes/EventHandler.ts
+++ b/src/compile/nodes/EventHandler.ts
@@ -32,7 +32,7 @@ export default class EventHandler extends Node {
if (node && node.type === 'VariableDeclaration') {
// for `const handleClick = () => {...}`, we want the [arrow] function expression node
const declarator = node.declarations.find(d => d.id.name === info.expression.name);
- node = declarator.init;
+ node = declarator && declarator.init;
}
if (node && /Function/.test(node.type) && node.params.length === 0) {
diff --git a/test/runtime/samples/event-handler-destructured/_config.js b/test/runtime/samples/event-handler-destructured/_config.js
new file mode 100644
index 0000000000..b32fe76c0a
--- /dev/null
+++ b/test/runtime/samples/event-handler-destructured/_config.js
@@ -0,0 +1,15 @@
+export default {
+ html: `
+
+ `,
+
+ async test({ assert, component, target, window }) {
+ const button = target.querySelector('button');
+ const event = new window.MouseEvent('click');
+
+ await button.dispatchEvent(event);
+ assert.htmlEqual(target.innerHTML, `
+
+ `);
+ }
+};
diff --git a/test/runtime/samples/event-handler-destructured/main.svelte b/test/runtime/samples/event-handler-destructured/main.svelte
new file mode 100644
index 0000000000..d80c7ed15c
--- /dev/null
+++ b/test/runtime/samples/event-handler-destructured/main.svelte
@@ -0,0 +1,16 @@
+
+
+
\ No newline at end of file