2017-08-14 81 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'中的描述符參數相同。 –

回答