Règles de type et de script
Les règles de type utilisent le vérificateur TypeScript lorsque des informations sémantiques sont nécessaires. Vize lit la même forme de projet
que TypeScript lit depuis tsconfig.json, donc les noms d’ambiance partagés doivent provenir de
compilerOptions.types, de références de projet ou de fichiers de déclaration.
Les règles de script sont des règles Patina pour l’API de composition et le code orienté Vapor. Ils se concentrent sur des motifs difficiles à compiler efficacement ou difficiles à raisonner en mode Vapor.
Le linting conscient du type est volontaire. Activez-le avec linter.typeAware: true, vize lint --type-awareou
en activant explicitement une règle type/*. type/no-reactivity-loss peut être activé directement avec
vize lint --strict-reactivity. Si Corsa ne peut pas être lancé, Patina signale type/corsa-runtime et
saute la passe de règles à damier au lieu de supprimer silencieusement les règles configurées.
--type-aware utilise la même résolution exécutable Corsa que vize check; Configurez
typeChecker.corsaPath lorsque le projet a besoin d’un binaire explicite tsgo ou Corsa. Les valeurs par défaut restent
coût zéro : Patina ne sélectionne pas les SFC pour le linting à damier ni ne commence Corsa à moins que le drapeau,
linter.typeAware, ou une règle de type/* explicitement activée ne l’accepte.
export default defineConfig({
linter: { typeAware: true },
});
type/require-typed-props
Il faut defineProps typer au lieu d’utiliser une déclaration de tableau à l’exécution.
Sévérité par défaut : warning
Presets : happy-path, nuxt, opinionated
Mauvais :
<script setup lang="ts">
const props = defineProps(["label", "count"]);
</script>
Bon :
<script setup lang="ts">
const props = defineProps<{
label: string;
count: number;
}>();
</script>
type/require-typed-emits
Il nécessite defineEmits de décrire les charges utiles d’événements émises.
Sévérité par défaut : warning
Presets : happy-path, nuxt, opinionated
Mauvais :
<script setup lang="ts">
const emit = defineEmits(["save"]);
emit("save", form.value);
</script>
Bon :
<script setup lang="ts">
const emit = defineEmits<{
save: [payload: FormValue];
}>();
emit("save", form.value);
</script>
type/no-unsafe-template-binding
Des liaisons de modèles de rapports qui résolvent vers des valeurs non sûres telles que any. La règle est basée sur des damiers,
elle suit donc les types importés et la configuration du projet.
Sévérité par défaut : warning
Préréglages : nuxt, opinionated
Mauvais :
<script setup lang="ts">
const payload: any = await loadPayload();
</script>
<template>
<p>{{ payload.title }}</p>
</template>
Bon :
<script setup lang="ts">
type Payload = { title: string };
const payload = await loadPayload<Payload>();
</script>
<template>
<p>{{ payload.title }}</p>
</template>
type/no-floating-promises
Signale des promesses créées mais non attendues, retournées ou gérées intentionnellement.
La vérification couvre à la fois les expressions <script> et les expressions modèles.
Sévérité par défaut : warning
Préréglages : nuxt, opinionated
Mauvais :
<script setup lang="ts">
function submit() {
saveForm(form.value);
}
</script>
<template>
<button @click="saveForm(form)">Save</button>
<p>{{ loadPreview() }}</p>
</template>
Bon :
<script setup lang="ts">
type Preview = { title: string };
async function submit() {
await saveForm(form.value);
}
const preview = ref<Preview | null>(null);
async function loadPreviewIntoState() {
preview.value = await loadPreview();
}
</script>
<template>
<button @click="void submit()">Save</button>
<button @click="void loadPreviewIntoState()">Preview</button>
<PreviewPanel v-if="preview" :preview="preview" />
</template>
type/no-reactivity-loss
Rapporte des instantanés simples des valeurs réactives utilisées entre les flux. La règle s’exécute aussi lorsque
vize lint --strict-reactivity est activé.
Sévérité par défaut : warning
Préréglages : nuxt, opinionated
Mauvais :
<script setup lang="ts">
const props = defineProps<{ item: { name: string } }>();
const item = props.item;
</script>
Bon :
<script setup lang="ts">
const props = defineProps<{ item: { name: string } }>();
const item = toRef(props, "item");
</script>
Checker Configuration
Les règles sensibles au type n’ont pas besoin d’un champ Vize globals séparé pour les noms TypeScript. Privilégiez
configuration native TypeScript :
Mauvais :
export default {
globals: ["definePageMeta", "process"],
};
Bon :
{
"compilerOptions": {
"types": ["node", "nuxt/app"]
}
}
script/no-options-api
Rapports Options Définitions de composants API dans des préréglages orientés Vapor.
Sévérité par défaut : error
Préréglages : nuxt, opinionated
Mauvais :
<script lang="ts">
export default {
data() {
return { count: 0 };
},
};
</script>
Bon :
<script setup lang="ts" vapor>
const count = ref(0);
</script>
script/no-next-tick
Les rapports nextTick() dans des composants orientés Vapor. Privilégiez les références directes, les hooks du cycle de vie ou les flux d’état
qui ne dépendent pas du prochain flush DOM.
Sévérité par défaut : error
Préréglages : nuxt, opinionated
Mauvais :
<script setup lang="ts" vapor>
await nextTick();
input.value?.focus();
</script>
Bon :
<script setup lang="ts" vapor>
const input = useTemplateRef<HTMLInputElement>("input");
onMounted(() => {
input.value?.focus();
});
</script>
script/no-get-current-instance
Les rapports getCurrentInstance() dans des composants orientés Vapor. Elle atteint des composants internes d’exécution que
Vapor ne peut pas optimiser en toute sécurité.
Sévérité par défaut : error
Préréglages : nuxt, opinionated
Mauvais :
<script setup lang="ts" vapor>
const instance = getCurrentInstance();
const app = instance?.appContext.app;
</script>
Bon :
<script setup lang="ts" vapor>
const appConfig = useAppConfig();
</script>