我知道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智能感知的好奇心。
答案 0 :(得分:0)
为了获得更好的智能感知,您可以在javascript代码中使用@ ts-check注释。您必须为detial而非推断类型提供jsdoc注释。像:
// @ts-check
let easy = 'abc'
easy = 123 // Error: Type '123' is not assignable to type 'string'
永远不要忘记它提供的打字稿和语言服务只能在编译时使用。由于javascript的动态特性,运行时“损坏”数据没有任何限制。