如何声明一个只设置一次的Typescript变量

yruzcnhs  于 2022-12-14  发布在  TypeScript
关注(0)|答案(2)|浏览(154)

对于const,值应该在声明时设置,对于let,变量可以更改,我需要一个在设置之前未定义的Typescript(或javascript)变量,一旦设置,就不能更改。

xdnvmnnf

xdnvmnnf1#

这对于单个原始值来说是不可能的,但是在JavaScript加上类型安全中很容易实现该逻辑,因为有一个setter方法来检查值是否已经设置,还有一个getter方法来检索它。

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);
goqiplq2

goqiplq22#

据我所知,你可能需要这样的东西,你不能使用const与此,只有让,你需要设置初始类型,否则它将推理任何默认或你可以使用联合类型,如字符串|编号,以便稍后将其设置为这两种类型。

let value : string;      // string | number
value = 'newValue as string'

相关问题