TypeScript:类型为'Message'|'Message []'的约定,但确保类型为'Message'

时间:2019-12-30 03:41:52

标签: typescript

现在,我有一个返回Promise Message | Message[]的方法。我通过以下方式将类型转换为Message

message.say('meow')
    .then((msg: Message|Message[]) => {
        (msg as Message).react('meow');
    })
    .catch(console.error);

但是,我不确定这是一个好习惯还是应该以其他方式进行。

1 个答案:

答案 0 :(得分:0)

由于Message是一类,您可以使用msg测试instanceof的类型。

message.say('meow')
  .then((msg: Message|Message[]) => {
    if (msg instanceof Message)
      msg.react('meow');
    else
      msg.forEach(x => x.react('meow'));
  })
  .catch(console.error);

这更安全,并且由于if语句的每个分支缩小了msg的类型,大多数IDE将提供有用的代码完成。