TypeScript报错:'value'可能为undefined.ts(18048) 求解决方法
解决TypeScript中setter的'value is possibly undefined'错误
你的问题出在TypeScript对getter和setter类型的推断逻辑上:因为构造器里_x是可选参数(类型为number | undefined),getter返回的this._x也会被推断为number | undefined,所以TypeScript会认为对应的setter参数value的类型和getter返回值一致,也就是number | undefined,这就导致你在判断value < 0时触发了"value可能为undefined"的报错。
下面是几种可行的解决办法:
显式指定setter参数类型
如果你希望setter只接受number类型,直接给value加上类型注解,强制限制传入值的类型:class Point { constructor(private _x?: number, private _y?: number) {} get x() { return this._x; } set x(value: number) { if (value < 0) throw new Error("Invalid"); this._x = value; } }在setter中处理undefined情况
如果你允许传入undefined,需要先判断值是否为undefined,再执行后续逻辑:class Point { constructor(private _x?: number, private _y?: number) {} get x() { return this._x; } set x(value) { if (value === undefined) { this._x = value; return; } if (value < 0) throw new Error("Invalid"); this._x = value; } }给构造器参数设置默认值
如果_x不应该为undefined,可以给构造器参数设置默认值,让_x的类型变为number,这样getter和setter的类型都会同步为number:class Point { constructor(private _x: number = 0, private _y: number = 0) {} get x() { return this._x; } set x(value) { if (value < 0) throw new Error("Invalid"); this._x = value; } }
内容的提问来源于stack exchange,提问作者RGriffiths
相关产品推荐
相关产品推荐

