为什么我们不能在TypeScript类中定义const字段,以及为什么静态只读不起作用?

时间:2017-10-17 07:05:39

标签: typescript const

我想在我的程序中使用const关键字。

export class Constant {

    let result : string;

    private const CONSTANT = 'constant'; //Error: A class member cannot have the const keyword.

    constructor () {}

    public doSomething () {
        if (condition is true) {
           //do the needful
        }
        else
        {
            this.result = this.CONSTANT; // NO ERROR
        }


    }
}

问题1 :为什么类成员在打字稿中没有const关键字?

问题2 :当我使用

static readonly CONSTANT = 'constant';

并在

中分配
this.result = this.CONSTANT;

显示错误。为什么呢?

我已关注此帖How to implement class constants in typescript?,但没有得到答案为什么typescript会使用const关键字显示此类错误。

1 个答案:

答案 0 :(得分:14)

  

问题1:为什么类成员在typescript中没有const关键字?

按设计。除了其他原因,因为EcmaScript6 doesn't either

此问题在此特别回答:'const' keyword in TypeScript

  

<强>问题2:   当我使用

     

static readonly CONSTANT = 'constant';并在

中指定      

this.result = this.CONSTANT;

     

显示错误。为什么呢?

如果您使用static,则无法使用this引用您的变量,但使用该类的名称!

export class Constant{

let result : string;

static readonly CONSTANT = 'constant';

constructor(){}

public doSomething(){
   if( condition is true){
      //do the needful
   }
   else
   {
      this.result = Constant.CONSTANT;
   }
}
}

为什么?因为this指的是字段/方法所属的类的实例。对于静态变量/方法,它不属于任何实例,而是属于类本身(快速简化)