NoInfer工具类型:强制精确泛型推断与约束
利用NoInfer让TypeScript在某些位置放弃类型推断,强制开发者提供精确类型或避免宽泛推断。 · 难度:入门 · +10XP
NoInfer工具类型
TypeScript 5.4+的NoInfer工具类型可以标记泛型参数中不应参与推断的位置。本教程展示如何使用NoInfer解决常见问题:防止类型收窄导致意外宽泛化、强制函数参数类型必须显式泛型、以及设计API时让某些类型参数固定。例如 function setState 使得state类型由full参数推断,避免用户误传不兼容的部分状态。同时讨论NoInfer与as const的协作。
import type { NoInfer } from 'typescript';
function createValidator(config: {
// schema字段不参与类型推断,必须由T显式提供
schema: NoInfer;
validate: (data: unknown) => data is T;
}): { schema: T; validate: (data: unknown) => data is T } {
return config;
}
// 使用:必须同时提供schema与validate,且schema类型由泛型参数控制
const validator = createValidator<{ name: string }>({
schema: { name: '' },
validate: (data): data is { name: string } => 'name' in data
});