You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Schema进行类型检测以让TypeScript正确识别类型?

使用Zod实现类型检测并让TypeScript正确识别

你已经通过Zod定义了Book的Schema,要实现一个能让TypeScript自动识别类型的检测函数,直接用Zod内置的safeParse方法配合类型谓词就能搞定。

步骤1:导出对应的TypeScript类型

先从Zod Schema里推导出自定义类型,避免手动重复编写:

import { z } from "zod";

export const Book = z.object({
    type: z.literal("book"),
    title: z.string(),
    published: z.number().int()
});

// 从Zod Schema推导TypeScript类型
export type Book = z.infer<typeof Book>;

步骤2:实现通用的isType检测函数

这个函数接收Zod Schema和待检测值,通过safeParse判断是否符合类型,同时用类型谓词告诉TypeScript检测成功后的类型:

function isType<T>(schema: z.ZodSchema<T>, value: unknown): value is T {
    const parseResult = schema.safeParse(value);
    return parseResult.success;
}

步骤3:按你的需求使用

现在就能像你想要的那样使用,TypeScript会自动在if分支里推断something的类型为Book:

const something: unknown = {
    type: "book",
    title: "TypeScript实战",
    published: 2023
};

if (isType(Book, something)) {
    // 这里TypeScript能正确识别something是Book类型,直接访问title等属性不会报错
    console.log(`The book title was '${something.title}'`);
}

补充说明

  • safeParse不会像parse那样抛出错误,而是返回一个包含success字段的结果对象,适合做条件判断。
  • 类型谓词value is T是核心,它让TypeScript知道:当函数返回true时,传入的value就是T类型,从而在后续代码中提供正确的类型提示和检查。

内容的提问来源于stack exchange,提问作者GregRos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:20:20