TypeScript为何允许属性初始化为undefined,却禁止手动设置?
TypeScript禁止手动给非可选属性赋值undefined的原因
先看这个示例类:
class MyObject { myVar: string; }
实例化后,myVar会默认处于undefined状态,但尝试手动给它赋值undefined时TypeScript会报错:
const obj: MyObject = new MyObject(); console.log(obj.myVar); // 输出 undefined console.log(typeof obj.myVar === 'undefined'); // 输出 true obj.myVar = undefined; // TypeScript报错:不能将类型“undefined”分配给类型“string”
如果要允许给该属性赋值undefined,必须显式声明类型为string | undefined。
很多人会疑惑:既然属性初始化后本来就是undefined,为啥不让手动设置?其实TypeScript的这个设计核心是区分“未初始化的默认状态”和“主动赋值为无值的操作”,具体原因有这几点:
- JS类属性原生默认就是
undefined,TypeScript没法完全屏蔽这个特性,所以只能允许初始化后的默认undefined状态 - 禁止手动赋值
undefined,是为了避免开发者误操作把本应持有有效值的属性改成无值,减少潜在bug - 这也是一种意图明确化的要求:如果你确实需要这个属性可以被主动置为undefined,就得显式声明
string | undefined,相当于明确告诉TypeScript和其他开发者——这个属性的有效值包含undefined,不是疏忽导致的无值。
内容的提问来源于stack exchange,提问作者Steven
相关产品推荐
相关产品推荐

