如何在TypeScript中返回两个函数作为结果?

时间:2018-06-26 15:36:27

标签: typescript typescript2.0

我具有以下功能:

public exist(index: number, type: string): boolean {
    return this.forms.filter(form => form.index == index + 1 && form.type == type).length > 0;
  }

如果元素存在于对象数组中,则此函数返回true / false。

如何返回两个函数而不是布尔值:_exist() {},form()像这样使用:

const e = this.exist(1, 'formLogin');
if (e._exist()) {
    console.log(e.form());
}

这意味着如果this.forms.filter返回true,我可以访问e.form()

我认为我需要使用闭包

我试图这样做:

public exist(index: number, type: string) {

    const lookForm = this.forms.filter(form => form.index == index + 1 && form.type == type);
    const lookFormExist = form.length > 0;

    function form() {
       return lookForm.shift();
    }

    return lookFormExist;
  }

1 个答案:

答案 0 :(得分:2)

只需返回一个带有函数的对象。

单独:filter(...).length > 0永远不是正确地检查数组中是否存在东西的正确方法。如果是===检查,则使用indexOf;如果需要,请使用some(视情况而定)。但是在这种情况下,您似乎想使用表格,在这种情况下,您将使用find

public exist(index: number, type: string): ExistResult {
  const form = this.forms.find(form => form.index == index + 1 && form.type == type);
  return {_exist() { return !!form; }, form() { return form; }} as ExistResult;
}

...其中ExistResult是您要为此定义的类型。

但是,我不会这样做。我只返回find的结果,并使用表单,如果结果虚假,则分支。我可能还会更改函数的名称。

public findForm(index: number, type: string): Form {
  return this.forms.find(form => form.index == index + 1 && form.type == type);
}

然后

const form : Form = this.findForm(1, 'formLogin');
if (form) {
    console.log(form);
}