gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 04:58:44 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com