TypeScript 如何做可选属性

在写代码时,你肯定遇过这种情况:给对象传参数,有的参数可填可不填。比如做外卖小程序,用户填地址是必须的,但填“备注”“门牌号”就不是强制的——总不能让用户每次都随便填“无”吧?这时候TypeScript的可选属性就能帮上大忙,不用再靠写一堆判断语句来处理“可能存在也可能不存在”的情况。

先看不用可选属性的麻烦

假设你要定义一个“用户信息”的对象,要求必须有姓名、年龄,要不要加“职业”呢?如果不用可选属性,就得把所有属性都写成必填,比如:

TypeScript 如何做可选属性

`typescript

interface UserInfo {

name: string;

age: number;

job: string; // 这里强制要填

}

`

但实际用的时候,很多人刚入职还没确定职业,总不能硬让他填个空吧?要是漏了job,TypeScript会直接报错,代码根本跑不起来。就算你硬填个空字符串,后续代码里用job的时候,还得反复判断“是不是真的有值”,写起来特别累。

可选属性的简单实现

解决这个问题的方法很简单,就是在属性名后面加个?,告诉TypeScript:“这个属性可填可不填,就算不写也没问题”。还是刚才的用户信息例子,改完之后是这样:

`typescript

interface UserInfo {

name: string;

age: number;

job?: string; // 加个?就变成可选属性了

}

`

现在你定义对象的时候,既可以写全所有属性:

`typescript

const user1: UserInfo = {

name: "小李",

age: 28,

job: "设计师" // 没问题,必填项都填了

};

`

也可以只填必填项:

`typescript

const user2: UserInfo = {

name: "小王",

age: 22 // 少了job属性,TypeScript也不会报错

};

`

是不是比之前灵活多了?这就像你买奶茶,“加珍珠”是可选的,店家不会逼你必须加。

用可选属性时要注意的小细节

虽然可选属性好用,但用的时候得避开两个常见的坑,不然代码还是会出问题。

第一个坑:别直接用可选属性的值。比如你想输出用户的职业,直接写console.log(user2.job),TypeScript会提示“job可能是undefined”——因为你没填这个属性,它的值就是undefined。这时候得加个简单判断,比如用??运算符(空值合并运算符):

`typescript

// 输出职业,没填的话就显示“未知职业”

console.log(user2.job ?? "未知职业");

`

第二个坑:别硬给可选属性赋值。比如你想给user2加个职业,直接写user2.job = "实习生"是可以的,但如果写user2.job = null,TypeScript又会报错——因为我们定义的job是string类型,不是string | null,要是允许空值,得把类型声明改对。

生活化的类比再理解一下

其实可选属性就像你手机里的“常用联系人”:姓名、手机号是必须存的(必填属性),但“备注”(比如“高中同学”)是可选的——你可以写也可以不写,完全不影响联系人的基本功能。要是没有可选属性,就像手机必须让你填备注才能存联系人,想想都麻烦。

掌握了这个小技巧,你在写TypeScript代码时,就能更灵活地处理那些“不是所有信息都必须给”的场景,不用再为了必填属性硬加冗余代码,让你的代码既规范又好用。

上一篇 Swift编程语言核心特性与实际应用场景的知识科普解析