Vize

类型与文字规则

类型规则在需要语义信息时使用 TypeScript 检查器。Vize的读数也是一样的 TypeScript 从tsconfig.json读取的项目形状,因此共享的环境名称应来自 compilerOptions.types、项目参考或声明文件。

脚本规则是用于合成API和面向蒸汽代码的Patina规则。他们关注的是模式 这些问题难以高效编译,或者在蒸汽模式下难以理清。

类型感知的 linting 是自愿选择的。通过linter.typeAware: truevize lint --type-aware或 通过明确启用type/*规则。type/no-reactivity-loss可以直接通过以下方式启用 vize lint --strict-reactivity。如果科尔萨无法启动,帕蒂纳报告type/corsa-runtime 跳过了跳过有检查器的规则传递,而不是悄无声息地放弃配置的规则。

--type-aware 使用与 vize check 相同的 Corsa 可执行解析;配置 typeChecker.corsaPath项目需要明确的tsgo或Corsa二进制时。违约保持 零成本:Patina 不会解析 SFC 以进行棋子背衬 linting,也不会启动 Corsa,除非旗帜, linter.typeAware,或者明确启用的type/*规则选择加入。

export default defineConfig({
  linter: { typeAware: true },
});

type/require-typed-props

需要用类型化defineProps而不是运行时数组声明。

默认严重程度:warning 预设:happy-pathnuxtopinionated

缺点:

<script setup lang="ts">
const props = defineProps(["label", "count"]);
</script>

好:

<script setup lang="ts">
const props = defineProps<{
  label: string;
  count: number;
}>();
</script>

type/require-typed-emits

需要defineEmits描述已发射的事件有效载荷。

默认严重程度:warning 预设:happy-pathnuxtopinionated

缺点:

<script setup lang="ts">
const emit = defineEmits(["save"]);

emit("save", form.value);
</script>

好:

<script setup lang="ts">
const emit = defineEmits<{
  save: [payload: FormValue];
}>();

emit("save", form.value);
</script>

type/no-unsafe-template-binding

报告模板绑定,解析为不安全值,如any。该规则有棋子支持, 所以它遵循导入的类型和项目配置。

默认严重程度:warning 预设:nuxtopinionated

缺点:

<script setup lang="ts">
const payload: any = await loadPayload();
</script>

<template>
  <p>{{ payload.title }}</p>
</template>

好:

<script setup lang="ts">
type Payload = { title: string };

const payload = await loadPayload<Payload>();
</script>

<template>
  <p>{{ payload.title }}</p>
</template>

type/no-floating-promises

报告承诺是创造但未被等待、未退回或有意处理的。 该检查涵盖<script>和模板表达式。

默认严重程度:warning 预设:nuxtopinionated

缺点:

<script setup lang="ts">
function submit() {
  saveForm(form.value);
}
</script>

<template>
  <button @click="saveForm(form)">Save</button>
  <p>{{ loadPreview() }}</p>
</template>

好:

<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

报告跨流使用的反应式值的纯快照。该规则还适用于 vize lint --strict-reactivity已启用。

默认严重程度:warning 预设:nuxtopinionated

缺点:

<script setup lang="ts">
const props = defineProps<{ item: { name: string } }>();
const item = props.item;
</script>

好:

<script setup lang="ts">
const props = defineProps<{ item: { name: string } }>();
const item = toRef(props, "item");
</script>

检查器配置

类型感知规则不需要为TypeScript名称单独设置一个Vize globals字段。更喜欢 TypeScript原生配置:

缺点:

export default {
  globals: ["definePageMeta", "process"],
};

好:

{
  "compilerOptions": {
    "types": ["node", "nuxt/app"]
  }
}

script/no-options-api

报告面向蒸汽预设的选项 API 组件定义。

默认严重程度:error 预设:nuxtopinionated

缺点:

<script lang="ts">
export default {
  data() {
    return { count: 0 };
  },
};
</script>

好:

<script setup lang="ts" vapor>
const count = ref(0);
</script>

script/no-next-tick

报告以蒸汽为导向的部件nextTick()。更倾向于直接引用、生命周期钩子或状态 流量不依赖于下一次DOM冲洗。

默认严重程度:error 预设:nuxtopinionated

缺点:

<script setup lang="ts" vapor>
await nextTick();
input.value?.focus();
</script>

好:

<script setup lang="ts" vapor>
const input = useTemplateRef<HTMLInputElement>("input");

onMounted(() => {
  input.value?.focus();
});
</script>

script/no-get-current-instance

报告以蒸汽为导向的部件getCurrentInstance()。它深入运行时内部 蒸汽无法安全地进行优化。

默认严重程度:error 预设:nuxtopinionated

缺点:

<script setup lang="ts" vapor>
const instance = getCurrentInstance();
const app = instance?.appContext.app;
</script>

好:

<script setup lang="ts" vapor>
const appConfig = useAppConfig();
</script>