Typescript 并不真正检查函数类型?

2023-12-06

给出下面的代码,类型脚本编译器不会引发任何错误,因此它只是不检查函数的参数类型?

var mySearch3:  (source: Person, subString: string)=> boolean  = 
       function()     {return true;}

TypeScript 尊重您可以忽略传递的参数这一事实。

当您定义了函数时,任何实现都必须通过具有正确类型的参数或省略该参数来兼容。

调用函数时,必须提供所有必需的参数(非可选且没有默认值的参数)。

让我们使用此接口来处理一些示例,该接口用于接受字符串和数字的函数:

interface Example {
    (name: string, age: number) : string;
}

以下所有功能都是兼容的:

var a: Example = function() { return 'Hello'; };
var b: Example = function(name: string) { return 'Hello ' + name; };
var c: Example = function(n: string, a: number) { return 'Hello ' + n + ' you are ' + a; };

每个参数都是兼容的,因为它要么指定正确类型的参数,要么省略它。这的关键是他们都必须以同样的方式被调用.

当我调用这些函数时,我必须指定这两个参数,即使它们不使用它们。这允许函数更改其实现,而不会影响依赖公共合约(期望传递两个参数)的调用者。

a('Rod', 50);
b('Jane', 50);
c('Freddy', 50);

现在让我们看看错误情况。

功能:

// The parameters are not compatible.
var d: Example = function(special: boolean) { return 'Hello';}

函数调用:

// You haven't passed the args
a();
a('Rod');

// Args are wrong type
a(50, 'Rod');
a('Rod', true);

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

Typescript 并不真正检查函数类型? 的相关文章

随机推荐

  • 使用 Vue.js 在 .then 函数中输入错误

    我有一个获取请求来检测用户是否是管理员 我的问题是我想使用显示一个按钮v if检查它是真是假 默认情况下该值设置为false Data 然后我们得到了按钮 And the then in beforeCreate 你需要使用一个箭头函数以保
  • Go 中的 int 字符串? [复制]

    这个问题在这里已经有答案了 我真的认为这会很简单 string myInt 看来不是 我正在编写一个函数 它接受一个整数切片 并将每个整数附加到一个字符串中 并在每个整数之间添加一个分隔符 这是我的代码 func xis Int16Slic
  • 为什么栈是有界的?

    在我使用过的任何平台上 堆栈大小始终是有限的 您必须在某个时刻 在程序启动之前 指定最大堆栈大小 并且它是预先分配的 为什么堆栈不能是驻留在堆内存中的链表 那么它几乎是无限的 它是当今所有计算机体系结构的固有属性吗 我的问题与任何特定的编程
  • C 程序 77% 的时间都花在 _platform_memmove$VARIANT$Haswell 中 [已关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我正在分析一些用 C 编写的数字代码 分析器是 Instruments 编译器是clang在 Mac OSX 10 11 6 上 多达 77 3 的运行时间花费在 platform mem
  • Java ProcessBuilder 具有多个带空格的参数

    我知道关于从 java 执行进程有很多已解决的问题 但我无法使用提供的答案解决我的问题 我正在尝试从 java 应用程序创建 postgresql 数据库备份 我使用以下代码 ProcessBuilder probuilder new Pr
  • 针对特定用户的 Firebase 数据库规则

    我有一个数据库 我需要对所有用户进行读取访问 并且 在用户运行的应用程序脚本中调用时的写访问权限 电子邮件受保护 我的 firebase 结构是 ABC AAA1 date ABC AAA2 date ABC AAA3 date ABC A
  • 滞后时间序列数据

    我正在寻找建立一个用于预测的神经网络模型 我试图让我的数据采用图像中显示的格式 以便模型可以根据 2 天前 1 天前 今天 的先前值进行预测 这些值将在第二天针对下一个预测进行调整 例如如图所示 第一次输入的 1 天前变为第二次输入的 2
  • ExtJS:Grid 和 Form 之间的两种方式绑定

    我正在尝试学习 ExtJS 但有点卡在一个地方 我想创建一个顶部有网格 底部有表单的屏幕 我想将它们彼此绑定 以便当我从网格中选择一行时 会填充表单字段 网格中具有相同的记录 并且当我更改网格或表单中的任何内容时 另一侧也会更新 到目前为止
  • 动态地将内容添加到线性布局?

    例如 如果我定义了一个方向为垂直的根线性布局 main xml
  • Java新手需要数据库连接方面的帮助

    我是 Java 新手 甚至是 Java 数据库连接新手 当我将其放入 Main 类中时 我已成功创建数据库连接并查询表 现在我已将其移至名为 Connection 的新类中 但出现错误 package lokate import java
  • 开发蓝牙 (AVRCP 1.4) iPhone 应用程序需要了解哪些规格

    我是 iPhone 开发新手 我将参与一个项目 其中我必须开发一个支持蓝牙的 iPhone 应用程序来控制车辆音响和 DVD 播放器 该车辆配有物理遥控器 IR 该项目的目的是用支持蓝牙的 iPhone 应用程序取代 IR 以控制 IR 的
  • Lambda 捕获和参数同名 - 谁隐藏了另一个? (clang 与 gcc)

    auto foo You re using g auto compiler detector foo auto foo std puts foo compiler detector You re using clang 铿锵 3 6 0和较
  • 合并“NSManagedObjectContextDidSaveNotification”后,NSFetchedResultsController 未显示所有结果

    我有一个 NSFetchedResultsController 它使用谓词获取对象 isTrash NO 大多数情况下 这会按预期工作 但是当对象未被破坏时 获取的结果控制器不会获取未被破坏的对象 出了什么问题 发生这种情况的原因是由于me
  • ES 模块导入不起作用

    我正在尝试制作普通 ES 导入导出的简单示例 索引 js main js import foo from mathModule console log foo mathModule js export const foo Math sqrt
  • 使用具有不同行结束样式的 m 标志来匹配行结束位置

    我试图用标签包装以 开头的每一行 尝试实现类似 GitHub Stackoverflow 的文本格式化语法 这就是我得到的 value preg replace m p 1 p value 经过谷歌搜索很长一段时间后 这似乎是正确的解决方案
  • C:“传递不兼容的指针类型”警告很重要?/将多维数组传递给函数

    我想编写一个带有指向多维数组的指针的函数 例如 include
  • Guy Yollin 的 QuantStrat I 讲座问题

    我一直在听 Guy 的 Quantstrat 讲座 下面的链接 在反复尝试重新执行代码后 我遇到了一些初始错误 这些错误导致讲座中的大部分后续代码无法运行 这是代码 从讲座中复制并进行了很小的重新安排 rm list ls all TRUE
  • c# XAML ProgressBar正确设置渐变填充

    如何设置a的渐变ProgressBar在XAML中动态填充 目前它是这样的 两个进度条的代码
  • GTK+ Vte.Terminal().fork_command_full 已删除?

    我上周注意到了这一点 我在 ubuntu 15 04 上的所有代码都运行良好 Vte Terminal fork command full Also 该文档站点以前也显示过此功能 但现在没有 这个功能被删除了吗 如果是这样 那么让虚拟终端小
  • Typescript 并不真正检查函数类型?

    给出下面的代码 类型脚本编译器不会引发任何错误 因此它只是不检查函数的参数类型 var mySearch3 source Person subString string gt boolean function return true Typ