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

TypeScript对象展开未校验扩展类型属性,如何实现缺失属性提示?

问题解决方案

问题根源

  • 原泛型函数的props参数被标注为any类型,TypeScript 会关闭针对any类型的所有静态校验规则,因此即便传入的属性缺失必填字段也不会触发警告。

修改方案

将props的类型替换为Omit<T, 'id'>,该工具类型会自动排除由函数内部生成的id字段,要求传入的props匹配目标类型除id外的所有属性约束:

function createThing<T extends IThing>(
    // 排除内部生成的id,剩余属性都要求用户传入符合类型要求的值
    props: Omit<T, 'id'>
): T {
    return {
        id: newId(),
        ...props
    } as T;
}

如果需要支持不传props的默认值场景,可以调整为:

function createThing<T extends IThing>(
    props: Omit<T, 'id'> = {} as Omit<T, 'id'>
): T {
    return {
        id: newId(),
        ...props
    } as T;
}

校验效果

修改后再调用示例代码时,TypeScript会直接抛出错误提示,要求传入缺少的必填属性a2:

// 会触发TS警告:类型 "{ a1: string; }" 缺少类型 "Omit<IThingA, "id">" 中的以下属性: a2
const thing: IThingA = createThing<IThingA>({a1: 'red'});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:45:03