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

TypeScript中如何校验对象是否包含其类型的全部属性?

在TypeScript中检查对象是否包含类型全部属性的方案

TypeScript的静态类型系统仅在编译阶段生效,编译完成后所有类型信息会被擦除,因此无法直接通过TypeScript本身在运行时检查对象是否包含对应类型的全部属性。但我们可以通过手动编写运行时校验逻辑来实现需求。

具体实现步骤

  1. 定义类型接口,并维护一份该类型的必填字段列表

    interface Person {
        name: string;
        age: number;
        eyeColor: string;
    }
    
    // 用keyof约束字段列表,确保和接口定义一致
    const PERSON_REQUIRED_FIELDS: Array<keyof Person> = ['name', 'age', 'eyeColor'];
    
  2. 编写校验函数,遍历字段列表检查对象属性

    function validatePerson(obj: unknown): asserts obj is Person {
        if (typeof obj !== 'object' || obj === null) {
            throw new Error('输入不是有效的对象');
        }
    
        for (const field of PERSON_REQUIRED_FIELDS) {
            if (!(field in obj)) {
                throw new Error(`${String(field)}字段缺失`);
            }
            // 可选:额外校验字段类型是否符合要求
            const value = (obj as Person)[field];
            switch (field) {
                case 'name':
                case 'eyeColor':
                    if (typeof value !== 'string') {
                        throw new Error(`${String(field)}必须是字符串类型`);
                    }
                    break;
                case 'age':
                    if (typeof value !== 'number' || !Number.isInteger(value)) {
                        throw new Error(`${String(field)}必须是整数类型`);
                    }
                    break;
            }
        }
    }
    
  3. 测试校验逻辑

    // 测试缺失age的对象
    const incompletePerson = {
        name: "Joe",
        eyeColor: "brown",
    };
    
    try {
        validatePerson(incompletePerson);
        console.log('对象校验通过');
    } catch (err) {
        console.error(err.message); // 输出:age字段缺失
    }
    

补充说明

  • 用keyof Person约束字段列表,能避免手动写错字段名,确保和接口定义同步
  • asserts obj is Person是TypeScript的类型断言函数,校验通过后,后续代码会自动将obj推断为Person类型
  • 如果需要处理嵌套对象、复杂规则校验,可考虑Zod、Yup等第三方校验库;简单场景下手动编写逻辑更轻量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 00:06:18