VSCode 智能感知 - class 个实例数组

VSCode intellisense - Array of class instances

我知道 VS 代码的 intellisense 由 TypeScript 编译器提供支持,但我不是在编写 TypeScript,只是很好的 ES2015。

无论如何,VS Codes intellisense 与 ES6 class 配合使用效果很好,但是我在有一个 classes 数组的地方感到困惑。我敢说这超出了编译器的能力范围,但是有什么方法可以编写代码使编译器可以推断存储在数组中的对象的类型吗?最好的猜测,因为显然它们可以是任何东西。

这是我的代码,向您展示我的意思。

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 Code 是否有可能推断出 api 实际上是 JSONPayloadApi 的一个实例并相应地提供智能感知?

我越想越觉得不是,因为我们可以在事后将我们想要的任何东西添加到该数组,从而破坏智能感知的任何意义。除非阵列被冻结。

这不是关键任务或其他任何东西,只是对 VS Code 智能感知能力的好奇。

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

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

永远不要忘记它提供的打字稿和语言服务仅在编译时有效。由于 javascript.

的动态特性,运行时对 "corrupt" 数据没有任何限制