javascript - 如何让 Visual Studio Intellisense 显示 javascript 回调中的属性?

标签 javascript typescript intellisense

export class Helper { 
static forEach(array, callback) {
    jQuery.each<string>(array, (index) => {
        var item = callback({Item: array[index], Continue: true });
        return item.Continue;
    });
}
//how do I get item to Not be type of any?
static Test() {
    var array = [1, 2, 3, 4, 5];
    this.forEach(array, item => {          
      item.  <---  No Intellisense prompt for Item or Continue here.
    });
  }
}

我正在创建一个包含回调的帮助器类,正如您在回调中看到的那样,它正在发送一个具有两个属性的对象。测试函数显示了它的使用方式以及我希望它做什么。

我尝试定义一个类并传递它,但智能感知仍然无法识别该类型。

export class ItemContinue {
    constructor(item) {
        this.Item = item;
    }
    Item: any = null;
    Continue: boolean = true;
}

export class Helper { 
static forEach(array, callback) {
    jQuery.each<string>(array, (index) => {
        var item = New ItemContinue(array[index]);
        callback(item);
        return item.Continue;
    });
}

最佳答案

问题在于 Helper.forEach 上的 callback 参数没有类型分配。因此它被隐式视为any。这也意味着它无法为您提供任何补全,因为 any 可以拥有所有属性,也可以没有。

将上面的代码与此进行比较:

static forEachTyped<T>(array : T[], callback : ({Item: T, Continue: boolean}) =>  {Item: T, Continue: boolean})
{
    jQuery.each<string>(array, (index) => {
        var item = callback({ Item: array[index], Continue: true });
        return item.Continue;
    });        
}    

在这里,我为 callback 参数指定了 ({Item: T, Continue: boolean}) => {Item : T, Continue : boolean}。这是一个函数的签名,该函数采用 {Item: T,Continue: boolean} 类型的单个参数并返回 {Item: T,Continue: boolean}.

因为您现在已经为回调函数参数分配了类型,所以该函数的智能感知现在可以运行:

static Test3() {
    var array = [1,2,3,4,5];
    this.forEachTyped<number>(array, (item) => {
        item. // Should provide completion for Continue and Item properties.
        return {Continue: item.Continue, Item: item.Item};
    })
}  

为了避免类似问题,您可以将 tsconfig.json 中的 noImplicitAny 设置为 true。每当您的代码分配隐式 any 类型并强制您为相关值分配类型时,这都会生成错误。

关于javascript - 如何让 Visual Studio Intellisense 显示 javascript 回调中的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42320634/

相关文章:

typescript 阻止从项目中的特定目录导入

javascript - Typescript 键入属性的定义

wpf - 用于数据绑定(bind)的 IntelliSense 不起作用

visual-studio-2010 - Visual Studio 2010 中没有 C++/CLI 的 IntelliSense?

javascript - 切换 "enter on submit"

php - 将我的 Google Chart(表格)数据导出到 excel 或 csv

javascript - Threejs、CSS3Renderer、混合渲染器大小调整和平移问题

node.js - NestJS 返回 HTTP 请求的结果

visual-studio-2010 - 如何在 Visual Studio 中提供自定义 Intellisense 描述

javascript - 如何在我的 Javascript 中找到内存泄漏?