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

如何在运行时验证反序列化的JSON对象符合指定接口?

运行时验证JSON对象是否符合ResponseRecord接口

TypeScript的接口仅存在于编译阶段,编译后会被完全擦除,无法直接用于运行时的类型校验。要验证API返回的JSON对象是否符合ResponseRecord的结构,需要手动编写运行时验证逻辑。

基础验证实现

可以编写一个类型守卫函数,既完成运行时校验,又能让TypeScript在编译阶段识别类型:

interface ResponseRecord {
    foo: string;
    bar: number;
}

function isResponseRecord(obj: unknown): obj is ResponseRecord {
    // 先排除非对象/空值的情况
    if (typeof obj !== 'object' || obj === null) {
        return false;
    }
    // 类型缩小后检查目标属性的存在性与类型
    const record = obj as Record<string, unknown>;
    return (
        typeof record.foo === 'string' &&
        typeof record.bar === 'number'
    );
}

使用方式

在获取API响应后调用该函数,通过条件判断自动缩小类型范围:

const json = await response.json();
if (isResponseRecord(json)) {
    // 此处json会被TypeScript推断为ResponseRecord类型,可安全访问foo和bar
    console.log(json.foo, json.bar);
} else {
    // 处理格式不符的情况,比如抛出错误、返回默认值等
    throw new Error('API响应格式不符合预期');
}

进阶场景说明

如果需要验证更复杂的结构(比如嵌套对象、可选属性、数组元素类型等),可以基于上述逻辑扩展验证规则;也可以使用zod、io-ts这类专门的运行时类型校验库来简化代码,不过对于简单结构,手动编写验证逻辑足够轻量高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 17:12:07