首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包装重载的类型记录函数

包装重载的类型记录函数
EN

Stack Overflow用户
提问于 2020-02-24 21:15:52
回答 3查看 476关注 0票数 3

我在为重载函数编写包装程序时遇到了困难。

我正在包装的函数是SendGrid电子邮件发送功能。该函数重载如下(简化):

代码语言:javascript
复制
declare class MailService {
  send(data: Email): foo;
  send(data: Email[]): foo;
}

我想编写一个可以接受EmailEmail[]的函数。但是当我这样做的时候,它抱怨没有过载与调用匹配:

代码语言:javascript
复制
function sendEmailWrapper1(data: Email | Email[]) {
  sendGrid.send(data)
}

然而,这样做是可行的:

代码语言:javascript
复制
function sendEmailWrapper2(data: Email | Email[]) {
  if ('length' in data) {
    sendGrid.send(data)
  } else {
    sendGrid.send(data)
  }
}

我认为Email | Email[]不是send(data: Email)send(data: Email[])的有效输入,并且类型记录没有意识到重载意味着sendGrid.send(data)应该是有效的(实际上,如果ifelse分支可以有相同的代码,并且是有效的,这就使得即使没有if语句也应该能够认识到该语句是有效的,因为类型记录是编译的,而且实际上不会指导运行时代码执行根据类型进行不同的函数调用)。

我的两个问题:

  1. 在这种情况下,最好的做法是什么?
  2. 这仅仅是类型记录编译器中的一个缺点,还是sendEmailWrapper1不能编译但sendEmailWrapper2可以工作的一个很好的原因?

谢谢!

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60384023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档