2017-06-22 53 views
0

我知道VS代碼的智能感知由TypeScript編譯器提供動力,但是我沒有編寫TypeScript,只是很好的'ES2015。VSCode intellisense - 類實例數組

無論如何VS代碼intellisense與ES6類的工作很好,但是我來脫粘,我有一個類的數組。我敢說這將超出編譯器能力領域,但是有什麼方法可以編寫代碼,以便編譯器能夠推斷存儲在數組中的對象類型嗎?最好的猜測,顯然他們可能是任何東西。

這裏是我的代碼,告訴你我的意思。

class JSONPayloadApi { 
    constructor(payload) { 
     this.apiName = payload.ApiName; 
     this.apiRoot = payload.ApiRoot; 
     this.apiTkn = payload.ApiTkn; 
    } 
} 

class JSONPayload { 
    constructor(value) { 
     const payload = JSON.parse(value); 

     this.apis = payload.Apis.map((x) => new JSONPayloadApi(x)); 
    } 
} 

// Pretend ive already created an instance of JSONPayload 
const api = jsonPayLoad.apis[0]; 

在上面的代碼是它在所有可能的代碼VS推斷該apiJSONPayloadApi INFACT一個實例,並相應地提供智能感知?

我越想越想不到,因爲我們可以在事後添加我們想要的數組,從而破壞intellisense的任何含義。除非數組被凍結的原因。

這不是任務關鍵或任何事情,更多的只是VS Code智能感知能力的好奇心。

回答

0

對於更好的智能感知,您可以在您的JavaScript代碼中使用@ ts-check註釋。你將不得不提供jsdoc註釋來推斷未推斷的類型。像:

// @ts-check 
let easy = 'abc' 
easy = 123 // Error: Type '123' is not assignable to type 'string' 

不要忘記,它提供的打字稿和語言服務只能在編譯時使用。由於javascript的動態特性,在運行時沒有任何「損壞」數據的限制。

+0

'ts-check'註釋似乎不是必需的,使用'jsDoc'註釋直接工作,謝謝。 – ste2425