使用Typescript

时间:2016-09-28 15:47:59

标签: javascript angular typescript

好吧,我试图做一些我认为完全不自然的事情。

我需要做的是,根据if返回不同的值,如下所示:

if(add)
    return {exists: myExists, key: myKey};

return myExists;

但是当我在别处调用函数的结果时,我得到了error TS2339: Property 'exists' does not exist on type '{ exists: boolean; key: number; } | boolean'.的编译。

这是我收到错误的地方(return语句位于IsInDays(value, add)

AddDay(value){
    var datas = this.IsInDays(value, true);
    if(!datas.exists)
        this.days.push(value);
    else{
        this.days.splice(datas.key, 1);
    }

    console.log(this.days);
}

我这样做是因为我不知道如何在对象中获取exists语句(调用函数)的[ngClass]值:/ < / p>

如果有人知道不同的方式会很棒。

4 个答案:

答案 0 :(得分:0)

您可以使用以下可选类型执行此操作:

function doesStuff(condition: boolean): string | { name: string, age: number } {
    if (condition) {
        return {name: 'A', age: 5};
    }
    return 'not found';
}

答案 1 :(得分:0)

布尔值没有exists,因此!datas.exists不起作用。使用typeof datas === "boolean"进行检查。

答案 2 :(得分:-1)

没关系。

我使用了我的循环两次,我只是想优化我的代码。以下是[ngClass]语句的函数:

IsInDays(value){
    for (var item of this.days) {
        if(item == value){
            return true;
        }
    }
}

答案 3 :(得分:-1)

我遇到了一个SONARQUBE问题,“必须使用过滤器的返回值”。

这是发行代码:-

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    DataTable dt = new DataTable();
    if (dataGridView1.DataSource != null)
    {
        dt = (DataTable)dataGridView1.DataSource;
        if (dt.Rows.Count > 0)
        {
            DataRow modifiedRow = dt.Rows[e.RowIndex];

            if (dataGridView2.DataSource != null)
            {
                dt = (DataTable)dataGridView2.DataSource;
                //"Id" is name of the column that has unique, non-nullable values
                if (dt.Rows.Count > 0 && dt.Rows.OfType<DataRow>().Where(x => x["Id"].ToString() == modifiedRow["Id"].ToString()) != null)
                {
                    dt.Rows.Remove(dt.Rows.OfType<DataRow>().Where(x => x["Id"].ToString() == modifiedRow["Id"].ToString()).ToList()[0]);
                }
            }
            else
            {
                dt = new DataTable();
            }
            dt.Rows.Add(modifiedRow);
        }
    }
    dataGridView2.DataSource = dt;
}

这是解决方案:-

private Foo(Data: Array<any>) {
    let result = [];
    Data.filter((item: any) => {
      if (!this.IsAlreadyExist(result, item.Name)) {
        result.push({
          Name: item.Name,
          Id: item.Id
        });
      }
    });
    return result;
}