VSCode intellisense - 类实例数组

时间:2017-06-22 08:56:11

标签: class ecmascript-6 visual-studio-code intellisense

我知道VS代码的智能感知是由TypeScript编译器提供支持的,但是我没有写过TypeScript,只是很好。 ES2015。

无论如何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代码是否可以推断api实际上是JSONPayloadApi的实例并相应地提供智能感知?

我想的越多,我猜的就越多,因为我们可以在事后添加我们想要的那个数组,破坏智能感知的任何意义。除非阵列冻结了原因。

这不是关键任务或任何事情,更多只是对VS Code智能感知的好奇心。

1 个答案:

答案 0 :(得分:0)

为了获得更好的智能感知,您可以在javascript代码中使用@ ts-check注释。您必须为detial而非推断类型提供jsdoc注释。像:

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

永远不要忘记它提供的打字稿和语言服务只能在编译时使用。由于javascript的动态特性,运行时“损坏”数据没有任何限制。