顺便说一下,为了更好地说明我想要什么,请查看这个库:
https://github.com/vriad/zod它可以让你在设计/编译时定义类似spec的架构,该架构也被TS编译器理解和可用。
// spec定义 - 在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:string;
neutered: boolean;
}
*/
// 使用推断类型进行编译时类型检查和设计时智能感知
const fido: Dog = {
name: 'Fido',
}; // TypeError: 缺少必要属性 `neutered`