打字稿中的联合类型和鸭子类型

时间:2021-07-02 12:31:21

标签: typescript

我有一个函数应该能够接受一个参数,即 typeAtypeB。这两种类型有一些不同的属性,我需要使用这些属性执行操作 - 取决于它是哪种类型。

我将联合类型传递给函数的 inputtypeA | typeB。但即使检查独特的属性也无济于事。我收到错误 Property 'value' does not exist on type 'typeA | typeB'. Property 'value' does not exist on type 'typeB'.(2339)

代码:

interface typeA {
  name: string;
  value: number;
}
interface typeB {
  name: string;
  data: number;
};

function double(input: typeA | typeB): number {
  if (input.value) {
    return input.value * 2;
  }
  if (input.data) {
    return input.data * 2;
  }
  return 0;
}

(此处打字稿游乐场中的相同代码:code

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:2)

这似乎有效:

if ('value' in input) {
  return input.value * 2;
}

Playground link