javascript - 是否可以使用变量来调用函数作为参数javascript
问题描述
假设需要使用执行相同操作但调用不同方法的条件。
const c = true; // for example sake
let b = '';
if (c) {
b = 'method1';
} else {
b = 'method2';
}
function a(){
this.service.b(filter).subscribe((result) =>{
// stuff happens
});
}
是否可以使用变量b
作为动态变量从服务调用方法?
根据示例更新片段,我可以执行以下操作:
if (this.title == 'Students') {
this.studentService.getStudents().then(results=> this.lists = results);
} else {
this.studentService.getCandidates().then(results => this.lists = results);
}
但是是否有可能做类似的事情:
this.studentService.get[this.title]().then(results=> this.lists = results);
正如副本所说,它不会那样工作。
解决方案
您可以使用索引访问来获取 Typescript 中的特定方法,诀窍是索引参数的类型。如果类型没有索引签名(类通常不应该),那么索引参数必须是类型keyof
class DoStuff {
messageA() : Promise<string> {
return new Promise(r=> r("messsageA"));
}
messageB() : Promise<string> {
return new Promise(r=> r("messsageB"));
}
}
let k: keyof DoStuff = Math.random()> 0.5 ? "messageA" : "messageB";
let o = new DoStuff();
o[k]().then(m=> console.log(m))
如果该类包含更多具有不兼容签名的方法,您可能无法调用o[k]
. 您可以通过列出您想要索引的确切方法(`let k :"messageA" | "messageB")来解决这个问题。或者,您可以使用类型 taht 过滤键:
class DoStuff {
messageA() : Promise<string> {
return new Promise(r=> r("messsageA"));
}
messageB() : Promise<string> {
return new Promise(r=> r("messsageB"));
}
util(): string { return ""}
}
let k: keyof DoStuff = (Math.random()> 0.5 ?"messageA" : "messageB") as keyof DoStuff;
let o = new DoStuff();
o[k]().then(m=> console.log(m)) //error
type FilterKeysByType<T, V> = { [P in keyof T] : T[P] extends V ? P : never}[keyof T]
let kok:FilterKeysByType<DoStuff, ()=> Promise<string>> = (Math.random()> 0.5 ?"messageA" : "messageB") as FilterKeysByType<DoStuff, ()=> Promise<string>>;
o[kok]().then(m=> console.log(m)) //error
推荐阅读
- java - 在 Java 中针对无方法调用进行按位优化
- c# - MVC Core 和 EF Core 手动解析输入文本框中的日期时间
- rest - 使用 Postman 在 Rest API 中找不到 ServletContainer 类的 HTTP 500 错误
- java - 当前的 msgraph-sdk-java 是否准备好用于生产级应用程序
- sql - 在 sql 查询中使用 count、sum 和 group by
- haskell - 有没有办法让 Shake(构建系统)显示所有生成的规则
- heroku - 将自定义域添加到 heroku
- c++ - define book class with member function and store value
- javascript - 为什么 getLastRow 方法无法正常工作
- indexeddb - JsStore 搜索空值