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

如何让TypeScript接口的所有可选属性支持null值?

如何给接口所有可选属性添加null类型支持?

给定如下接口:

interface IExample {
  property1: string;
  property2: number;
  property3?: number;
  property4?: string;
}

需求是让该接口的所有可选属性都能接受null值,但不想为每个可选属性单独添加null类型。

你尝试的类型工具无法生效:

type SetOptionalKeysNullable<T> = {
  [K in keyof T]: T[K] extends undefined ? undefined | null : T[K];
};

问题原因

你写的类型判断逻辑有误:T[K] extends undefined是在判断属性类型是否等于undefined,但可选属性的实际类型是「原类型 | undefined」(比如property3的类型是number | undefined),显然number | undefined并不extendsundefined,所以这个判断不会命中任何可选属性,自然无法添加null类型。

正确的类型工具

需要反过来判断:检查undefined是否是属性类型的子类型(也就是该属性是否为可选属性),修改后的类型如下:

type SetOptionalKeysNullable<T> = {
  [K in keyof T]: undefined extends T[K] ? T[K] | null : T[K];
};

验证效果

用这个类型处理IExample:

type IExampleWithNullableOptionals = SetOptionalKeysNullable<IExample>;

最终得到的类型等价于:

interface IExampleWithNullableOptionals {
  property1: string;
  property2: number;
  property3?: number | null | undefined;
  property4?: string | null | undefined;
}

所有可选属性现在都支持null值,同时保留了原有的可选特性和必填属性的类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:37:38