在 Typescript 中使用“--strictFunctionTypes”有什么好处?

2023-12-22

据我了解,--strictFunctionTypesTypescript 中的编译器选项阻止了一个非常常见的多态性用例的工作:

type Handler = (request: Request) => Response

const myHandler: Handler = (request: Request & { extraArg: boolean }) => {
  return !!request.extraArg
}

一般来说,我假设所有编译器选项strict家庭有一些很大的好处,但在这种情况下,我所看到的只是它阻止了非常合乎逻辑的行为的发挥。

那么在什么情况下这个选项实际上能带来一些好处呢?它可以防止哪些有害情况?


实际上很容易导致运行时错误而不需要strictFunctionTypes.

让我们考虑以下示例:

type Handler = (request: Request) => Response

const myHandler: Handler = (request: Request & { extraArg: string }) => {
    // extraArg is required so need to check for null
    request.extraArg.toUpperCase();
    return null as any;
}

declare let r: Request; // comes from sowhere 
myHandler(r); // no need to pass in the extraArg not required by the signature

所以在上面的例子中,函数签名需要一个Request这就是我们必须传递的所有内容Request。但实施预计会收到Request & { extraArg: string }其中extraArg是必需的,并且无需进行检查即可访问它(毕竟,如果需要,被调用者应该已将其传入)。

就是这样的错误strictFunctionTypes防止。如果签名中的参数是基类型,而实现需要派生类型,则不能保证实现将接收派生类型,因为签名只需要传入基类型

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Typescript 中使用“--strictFunctionTypes”有什么好处? 的相关文章

随机推荐

  • Android 将日期和时间转换为毫秒

    我有一种日期和时间格式 如下所示 Tue Apr 23 16 08 28 GMT 05 30 2013 我想转换成毫秒 但实际上我不知道它是什么格式 有人可以帮助我吗 更新为日期时间格式化程序 https developer android
  • 如何在 UWP 应用中编码/解码 url 字符串

    我正在构建一个与 Web Api 通信的 UWP 应用程序 在某些时候 我将 url 中的字符串发送到可由用户操作的 Web Api 因此 该字符串可能包含可能对 Web Api 造成不良影响的字符 例如 这是我的用户控制器 Route a
  • 如何使用 PHP 循环隐藏字段项并放入会话中

    我有隐藏字段 其中包含这种格式的值 ENO 123 EQNO 231 地点 芝加哥 ENO 567 EQNO 898 地点 佛罗里达 在上面的行中 我有两对用 分隔的记录 对于每条记录 我都有由 分隔的三列 现在我如何循环遍历并将每一列放入
  • 为什么出口/进口申报必须在 es2015 中处于顶层?

    我在上一个项目中开始使用 es2015 和 babel 当我尝试做的时候import or export inside if条件 我有一个错误 import and export may only appear at the top lev
  • 使用内联和 Rcpp 调用 R 函数仍然与原始 R 代码一样慢

    我需要评估一个需要长循环的函数 后验分布 显然我不想在 R 本身中执行此操作 因此我使用 inline 和 Rcpp 来实现 C 但是 我发现在每个循环都使用 R 函数的情况下 cxx 函数的运行速度与运行 R 代码一样慢 请参阅下面的代码
  • IBPY 中的 reqHistoricalData 不返回任何内容 [python]

    我正在尝试通过 Ibpy 从盈透证券 IB 获取历史数据 我已经尝试了几个脚本来完成此任务 这些脚本是从其他人那里改编而来的 他们表明它应该可以工作 然而 它们都不适合我 我是Python新手 所以我承认我对这些方法的工作原理没有完全的了解
  • 为什么我的 Java 数学错误?

    在下面的代码中 我看不出 T1 和 T3 有什么不同 当然我的计算器说不是 public class longTest public static final long T1 24 60 60 1000 30 public static f
  • Python OpenCV:绘制矩形的鼠标回调

    我想从视频流中保存图像 然后在显示的图像上绘制一个矩形以生成感兴趣的区域 稍后 将该 ROI 保存在文件中 我使用 opencv pythongrabcut 示例来使用 setMouseCallback 函数 但我不知道我做错了什么 因为它
  • 使用电子邮件登录后无法通过 firebase 获取更新的个人资料信息

    我目前正在使用 React Native 开发一个应用程序 我可以设法拥有登录和注册页面 但我的问题如下 使用 firebase 方法使用电子邮件和密码创建用户后 我想更新个人资料信息 displayName 以便将其显示在主页中 但似乎注
  • 使用 Modular SDK v9 的 Firestore 条件 where 子句

    如何执行带条件的查询where 使用 Firebase Modular SDK v9 的条款 名称空间版本 v8 中的示例查询 const status live const publishedAfter 1630607348811 let
  • 缩小和放大后 MapOverlay 闪烁 - iOS

    我有两个问题 首先 一旦我为坐标分配内存 请参阅下面的代码 我是否必须释放内存 坐标 其次 正如您在下面的代码中看到的 我得到了叠加层并添加到地图上 但是 有不同的时间戳提要坐标 应该更新地图 就像雷达地图用不同的时间戳改变叠加形状一样 它
  • 在对话框中的 QTextEdit 中按 Tab - 更改行为

    I have QDialog包含几个按钮和一个QTextEdit 在写了一些东西之后QTextEdit 我按 Tab 键以到达其中一个按钮 但是当我按 Tab 键时 会在QTextEdit 我怎样才能改变这种行为 您可以使用设置TabCha
  • 如何开始针对 Amazon Fire TV 进行开发?

    我被要求开发一个 Amazon Fire TV 应用程序 但我发现很难理解步入正轨所需的步骤 根据亚马逊指定文档 https developer amazon com public solutions devices fire tv doc
  • 我应该如何存储在 Google Cloud Platform 中使用的机密?

    如果我需要将凭据存储在 Google Compute Engine 或 Google App Engine 中以便在构建时使用 我应该如何存储它们 还有什么比将它们存储在代码中或存储桶中更好的方法吗 一种选择是使用 Cloud KMS 中的
  • 使用 Twitter Bootstrap 触发导航选项卡的按钮

    该按钮触发下一个选项卡加载内容 但选项卡本身不会切换 它保留在第一个选项卡上 br a class btn btn primary href tab2 Review a br 这是导航导航选项卡的代码 ul class nav nav ta
  • 如何避免在控制台上打印系统日志的广播消息

    我编写了一段小代码 用于在连接到 postgres 数据库失败时使用 C Api 向系统日志发送消息 int main int argc char argv PGconn psql PGresult res int flag 0 openl
  • 高分辨率下 Swing UI 缩放不良(MS Surface)

    我目前正在开发一个涉及 Swing GUI 的小型 Java 应用程序 在我的开发 PC 上 一切看起来都很好 但当我在 MS Surface 上运行它时 某些图标对于组件来说似乎太大 或者组件对于图标来说太小 这就是我的意思 Google
  • Django 全文搜索按相关性顺序

    我正在使用 Django 查询过滤器 search 来执行全文搜索 例如 MyModel objects filter title search some title 我如何让它按相关性排序 因为目前它似乎是按字母顺序排序的 具体来说 我想
  • Java Posix IPC 有API吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想知道是否可以访问 Java 中的 Posix 消息队列 因为我有一个无法修改并使用消息队列与其他进程
  • 在 Typescript 中使用“--strictFunctionTypes”有什么好处?

    据我了解 strictFunctionTypesTypescript 中的编译器选项阻止了一个非常常见的多态性用例的工作 type Handler request Request gt Response const myHandler Ha