TypeScript中能否禁止类属性赋值并抛出运行时错误?
问题
我编写了如下TypeScript代码:
class Computed<Value> { _value: Value; get value(){ return this._value; } }
当尝试为value属性赋值时,TypeScript会提示编译错误:Cannot assign to value because it is a read-only property.
目前编译时的限制符合需求,但我还想添加运行时检查,在有人尝试为该属性赋值时抛出错误,请问这是否可行?
回答
当然可行。你只需要给value属性添加一个setter方法,在setter中抛出错误即可。即便有人绕过TypeScript的编译检查(比如直接在JavaScript环境中使用代码,或通过类型断言跳过编译校验),运行时也会触发错误,阻止赋值操作。
修改后的代码如下:
class Computed<Value> { _value: Value; get value() { return this._value; } set value(_: Value) { throw new Error('Cannot assign to read-only property "value"'); } }
测试示例:
const comp = new Computed<number>(); comp.value = 123; // 编译时触发TypeScript错误,运行时执行该行会抛出Error
这种方式既保留了编译时的只读校验,又补充了运行时的防护,完全满足你的需求。
内容的提问来源于stack exchange,提问作者Dusan Jovanov
相关产品推荐
相关产品推荐

