2017-08-14 531 views
0

如果我们看看下面这个例子:默认的“get”访问描述符(带有定义的“set”访问符描述符)的类型是“undefined”吗?

class MyClass {                

    private _myVar: string;              

    public constructor() {              
    this._myVar = 'Hello world!';            
    }                   

    public set myVar(value: string) {           
    this._myVar = value;              
    }                   

}                    

const myObj = new MyClass();             

const otherVar: string = myObj.myVar; 

没有错误产生,但应该有?

类没有为myVar属性get关键,所以它默认为undefined,然而打字稿编译器不拿起这一点,说最后otherVar分配是好的。

应该不是最后一次分配错误吗?

+1

当你创建一个'property',所有按键被保留。 'get'被定义,但是返回'undefined'。在我看来,编译时指出缺少的getter时应该抛出一个错误。您可以将问题告知他们的github页面。 –

+0

我将在跟踪器上打开一个问题,但是如果查看从TS中编译的JS,没有定义'get'(只是'set')。 – pleasedesktop

+0

我应该改述我之前说过的话。属性描述符的所有键都被保留。 AFAIK get方法在属性描述符中定义,但会返回undefined,与'writable'相同,默认值为false,用于定义值的属性。以上是调用myVar属性的法律声明,因此不会引发错误。但是,这应该在编译时检测到,并且最好让编译器抛出一个错误。在类的实例中'get'和'set'基本上定义为与'Object.defineProperty'中的描述符参数相同。 –

回答