2017-06-22 49 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