gpt4 book ai didi

带有 undefined variable 参数的 typescript 回调

转载 作者:行者123 更新时间:2023-12-05 05:13:31 25 4
gpt4 key购买 nike

我无法通过回调函数传递多个参数。由于某种原因是 undefined object 之一。

如何定义具有多个参数的回调函数?

  public save() {
let oldStartDate = "2019-01-01";

let newProject = new Project();
newProject.oldStartDate = "2018-01-01";

this.doSomeWork(newProject, this.workFinished_Callback.bind(this), oldStartDate);
}

public doSomeWork(project:Project, callback: (updatedProject: Project, ...param: any[]) => any = null, ...callbackArgs: any[]) {
//Work work..
console.log(project); //This exists..

callback.call(project, ...callbackArgs);
}

public workFinished_Callback(project:Project, oldStartDate: string) {
console.log(project); //This is undefined..
console.log(oldStartDate); //Shows 2018-01-01
}

最佳答案

问题在于您如何使用call。要调用的第一个参数是传递给函数的 this 参数,因为您绑定(bind)了回调,所以回调中将无法访问该参数。您可以将 null 作为第一个参数传递并将项目作为第二个参数传递并将其余参数作为其他参数传播:

callback.call(null, project, ...callbackArgs);

更好的方法是不使用调用。您可以像往常一样调用该函数:

callback(project, ...callbackArgs);

您还可以构建完全类型安全的代码版本。在 3.2 中,如果启用 strictBindCallApply,则可以正确输入 bind(阅读 PR)。这意味着我们可以使用 bind 并获得正确类型的函数。将它与 rest 参数 ( PR ) 中的元组配对,我们可以让编译器为我们全面检查:

class Project { oldStartDate!: string }
type DoSomeworkCallbackArgs<T extends (updatedProject: Project, ...param: any[]) => any> =
T extends (updatedProject: Project, ...param: infer A) => any ? A : []
class DD {
public save() {
let oldStartDate = "2019-01-01";

let newProject = new Project();
newProject.oldStartDate = "2018-01-01";

this.doSomeWork(newProject, this.workFinished_Callback.bind(this), oldStartDate);
this.doSomeWork(newProject, this.workFinished_Callback.bind(this), 0); //error
}

public doSomeWork<T extends null | ((updatedProject: Project, ...param: any[]) => any)>(project: Project, callback: T = null, ...callbackArgs: DoSomeworkCallbackArgs<T>) {
//Work work..
console.log(project); //This exists..
if (callback) callback(project, ...callbackArgs);
}

public workFinished_Callback(project: Project, oldStartDate: string) {
console.log(project); // ok now
console.log(oldStartDate); //Shows 2018-01-01

}
}


new DD().save()

关于带有 undefined variable 参数的 typescript 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53590875/

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