顺便说一句,为了更好地说明我所寻找的内容,请查看以下库:
https://github.com/vriad/zod它让您能够定义类似于规格的模式,同时这些模式在设计和编译时也由TS编译器理解和使用。
// 规格定义 - 在TS编译之后存在,可以用来验证模式
const dogSchema = z.object({
name: z.string(),
neutered: z.boolean(),
});
// 运行时验证规格
const cujo = dogSchema.parse({
name: 'Cujo',
neutered: true,
}); // 通过,返回Dog
// TypeScript类型定义 - 在TS编译之后不存在
type Dog = z.infer<typeof dogSchema>;
/*
等价于
type Dog = {
name
neutered: boolean;
}
*/
//使用推断的类型进行编译时类型检查和设计时智能感知
const fido: Dog = {
name: 'Fido',
}; // TypeError: 缺少必需的属性 `neutered`