const obj = (() => {
let val: number;
return {
setVal: (newVal: number) => {
if (val !== undefined) {
throw new Error('Value has already been set');
}
val = newVal;
},
getVal: () => {
if (val === undefined) {
throw new Error('Value has not been set yet');
}
return val;
}
};
})();
// will throw an error
const result1 = obj.getVal();
// will return 3
obj.setVal(3);
const result2 = obj.getVal();
// will throw an error if run just after the above
obj.setVal(5);
2条答案
按热度按时间xdnvmnnf1#
这对于单个原始值来说是不可能的,但是在JavaScript加上类型安全中很容易实现该逻辑,因为有一个setter方法来检查值是否已经设置,还有一个getter方法来检索它。
goqiplq22#
据我所知,你可能需要这样的东西,你不能使用const与此,只有让,你需要设置初始类型,否则它将推理任何默认或你可以使用联合类型,如字符串|编号,以便稍后将其设置为这两种类型。