将类作为函数参数传递

时间:2019-06-03 20:10:13

标签: javascript typescript

我只是在找乐子,用C#制作类似于LINQ的库。我正在尝试创建ofType()方法,该方法过滤现有列表并仅返回与指定类型匹配的数组。

到目前为止我所拥有的:

export class JSLinqArray<T> extends Array<T> {
  constructor(arr?: Array<T>) {
    super(...arr);
  }

  ofType = <U>(type: U): JSLinqArray<U> => {
    const output = new JSLinqArray<U>();
    for (let i = 0; i < this.length; i++) {
      if (this[i] instanceof type) {
        output.push(<any>this[i]);
      }
    }
    return output;
  }

  toArray = function (): T[] {
    const temp: T[] = [];
    for (let i = 0; i < this.length; i++) {
      temp.push(this[i]);
    }
    return temp;
  }
}



const mixedArr = new JSLinqArray<string | number>(['test1', 1, 2, 'test2']);

const test = mixedArr.ofType(String);
console.log(test.toArray());

如何通过String方法传递NumberCustomClass甚至是ofType泛型类型引用,以便可以正确地使用instanceof比较?

现在,故障点在ofType方法中的if语句处。 The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type.

2 个答案:

答案 0 :(得分:2)

我对答案没有100%的信心,因此可以免责。

我可以看到的一个问题是javascript load Data.mat; [C,U] = fcm(Data,2); figure hold on for i=1:2 plot(Data(index{i},1),Data(index{i},2),'o') plot(C(i,1),C(i,2),'xk','MarkerSize',15,'LineWidth',3) end hold off 类型与原始Number类型不同。 numberString也不相同。

因此,将不可能传递数字,并且期望Number的实例。

答案 1 :(得分:1)

instanceof在JavaScript中用于类型检查是不可靠的。

更改

if (this[i] instanceof type)

收件人

if (this[i].constructor === type)

之所以起作用,是因为它将迫使运行时将原始值强制转换为Object类型。构造函数将正确匹配。