Skip to content

vue/valid-define-options

enforce valid defineOptions compiler macro

  • ⚙️ This rule is included in all of "plugin:vue/essential", *.configs["flat/essential"], "plugin:vue/strongly-recommended", *.configs["flat/strongly-recommended"], "plugin:vue/recommended" and *.configs["flat/recommended"].

This rule checks whether defineOptions compiler macro is valid.

📖 Rule Details

This rule reports defineOptions compiler macros in the following cases:

  • defineOptions is referencing locally declared variables.
  • defineOptions has been called multiple times.
  • Options are not defined in defineOptions.
  • defineOptions has type arguments.
  • defineOptions has props, emits, expose or slots options.
<script setup> /* ✓ GOOD */ defineOptions({ name: 'foo' }) </script>
Now loading...
<script> const def = { name: 'foo' } </script> <script setup> /* ✓ GOOD */ defineOptions(def) </script>
Now loading...
<script setup> /* ✗ BAD */ const def = { name: 'foo' } defineOptions(def) </script>
Now loading...
<script setup> /* ✗ BAD */ defineOptions({ name: 'foo' }) defineOptions({ inheritAttrs: false }) </script>
Now loading...
<script setup> /* ✗ BAD */ defineOptions() </script>
Now loading...
<script setup lang="ts"> /* ✗ BAD */ defineOptions<{ name: 'Foo' }>() </script>
Now loading...
<script setup> /* ✗ BAD */ defineOptions({ props: { msg: String } }) </script>
Now loading...

🔧 Options

Nothing.

🚀 Version

This rule was introduced in eslint-plugin-vue v9.13.0

🔍 Implementation