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

TypeScript可选属性值为undefined时键不显示,如何将其设置为null?

核心原因

你初始化的financialAccount本身就是空对象,未赋值的可选属性根本不存在于对象实例上,所以console.log不会输出这些不存在的键。另外TypeScript的interface仅在编译阶段生效,运行时不会保留任何接口的属性信息,所以你需要先显式声明所有属性的集合,再统一给对象补全属性。


方案1:手动枚举属性(推荐,适配所有场景)

先把FinancialAccountInputModel的所有属性列成固定数组,遍历数组给对象补全属性,只有值为undefined的属性会被设为null,不会覆盖0、空字符串这类合法的假值:

// 按接口定义列出所有属性
const ACCOUNT_ALL_FIELDS: Array<keyof FinancialAccountInputModel> = ['id', 'code' /* 剩余20+属性依次补充 */];

// 遍历补全属性
const processedAccount = ACCOUNT_ALL_FIELDS.reduce((result, field) => {
  result[field] = financialAccount[field] ?? null;
  return result;
}, {} as FinancialAccountInputModel);

console.log(processedAccount); // 所有属性都会显示,未赋值的为null

方案2:用类+默认值替代interface(适合重复复用场景)

如果不想每次都手动列属性数组,可以把interface替换为类,给所有属性设置默认值为null,实例化后自动携带所有属性:

export class FinancialAccountInputModel { 
  id?: number | null = null;
  code?: string | null = null;
  // 剩余所有属性都设置默认值为null
}

// 实例化后直接赋值即可
const financialAccount = new FinancialAccountInputModel();
// 比如赋值 financialAccount.id = 1001
console.log(financialAccount); // 所有属性都存在,未赋值的为null

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:39:04