Vize

script/require-define-component

Require defineComponent() for TypeScript SFC default exports.

Default severity Presets Automatic fix Options
error happy-path, ecosystem, nuxt, opinionated No None

Applies to: JS/TS scripts in Vue SFCs; examples show the relevant Options API or script setup form.

Bad

The TypeScript SFC exports a plain Options API object, so its component options do not receive the contextual types supplied by defineComponent().

<script lang="ts">
export default {
  props: { count: Number },
  mounted() {
    console.log(this.count)
  }
}
</script>

Good

Wrapping the object with defineComponent() gives props, emits, this, and the other component options Vue-aware TypeScript checking.

<script lang="ts">
import { defineComponent } from 'vue'
export default defineComponent({
  props: { count: Number },
  mounted() {
    console.log(this.count)
  }
})
</script>

Configuration (Vite+)

import { defineConfig } from "@vizejs/vite-plugin/vite-plus";

export default defineConfig({}).withVue({
  linter: {
    "preset": "incremental",
    "rules": {
      "script/require-define-component": "error"
    }
  },
});

Then run vp run lint.