作为接口或接口[]类型的变量

时间:2019-11-07 11:37:07

标签: javascript typescript interface

在此代码中:

insert1(data: iFlower) {
    ...
    return data;
}

insert2(data: iFlower[]) {
    ...
    return data;
}

public insert (data: iFlower | iFlower[]) {
    if (data as iFlower) {
        return this.insert1(data as iFlower);
    }
    else if (data as iFlower[]) {
        return this.insert2(data as iFlower[]);
    }

当我调用insert()函数时,根据变量data的类型,我想调用一个方法或另一个方法。但是在这种情况下,如果data是对象数组(iFlower[]类型),它仍然会输入insert1函数...或者更确切地说,即使dataiFloweriFlower[]类型的,它将调用相同的方法。

我该如何解决? :(

1 个答案:

答案 0 :(得分:1)

as是可用于打字转换类型的打字稿运算符。它在运行时不进行任何检查,因此它是无用的。您的代码基本上是在运行时执行的:

 if(data /*as iFlower*/) // data is truthy, enters branch

您可以使用Array.isArray来确定传递的值是否为数组:

 if (Array.isArray(data)) // iFlower[]