【问题标题】:Function doesn't work when tested with typescript?使用打字稿测试时功能不起作用?
【发布时间】:2022-01-09 02:00:46
【问题描述】:

我有一个奇怪的问题。我在 js 中有以下函数:

const removeDuplicates = (inputData) => {
  return [
    ...new Map(inputData.map((data) => [JSON.stringify([data.x, data.y, data.v]), data])).values()
  ];
};

我在一个开玩笑的打字稿测试中像这样测试它:

it('removeDuplicates', () => {
    const expectedObject = [
    { x: 'G', y: 'B', v: '12345' },
    { x: 'A', y: 'L', v: '12345' },
    { x: 'A', y: 'W', v: '123' },
    { x: 'A', y: 'W', v: '1234' }
];
    
    
    const inputData = [
      { x: 'G', y: 'B', v: '12345' },
      { x: 'A', y: 'L', v: '12345' },
      { x: 'A', y: 'L', v: '12345' },
      { x: 'A', y: 'W', v: '123' },
      { x: 'A', y: 'W', v: '1234' },
      { x: 'A', y: 'W', v: '1234' }
    ];
    expect(removeDuplicates(inputData)).toEqual(expectedObject);
  });

当测试在 js 文件中时它通过,当我将测试文件转换为 ts 文件时,它失败并且函数什么也不返回!有什么想法吗?

【问题讨论】:

  • removeDuplicates(inputData)[0].x === '-G', 而expectedObject[0].x === 'G'

标签: javascript typescript jestjs ts-jest


【解决方案1】:

如果没有编译器选项“--downlevelIteration”,编译器似乎不喜欢它。这是你设置的吗?

Type 'IterableIterator<unknown>' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators.ts(2569)

您可以改用Array.from

type MyThing = { x: string; y: string; v: string };

const removeDuplicates = (inputData: MyThing[]): MyThing[] =>
  Array.from(
    new Map(
      inputData.map((data) => [JSON.stringify([data.x, data.y, data.v]), data])
    ).values()
  );

您还应该考虑将外部库用于此类琐碎的任务。例如。 Ramda 的 uniq 函数应该完全一样。

【讨论】:

    猜你喜欢
    • 2019-09-30
    • 2022-01-11
    • 2018-09-29
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 2022-01-23
    相关资源
    最近更新 更多