typescript - 为什么所需类型的函数参数可分配给可选类型?
问题描述
可选类型 → 必需类型
const testFunc = (func: (param: number) => void): void => {
func(3);
};
testFunc((a?: number) => {
console.log(a);
});
必需类型 → 可选类型
const testFunc = (func?: (param: number) => void): void => {
func(3);
};
testFunc((a: number) => {
console.log(a);
});
在上面的例子中,为什么 TypeScript 不会抛出类型错误?
更新
让我们考虑一下 React 中的具体示例。我有处理函数,其中参数是必需的类型。但是,当我将此处理函数作为组件传递给道具时,哪些类型是可选的。无法推断。在处理函数中处理重要逻辑时会出现问题。因为参数可以为空。
解决方案
示例 1
这是一个高阶函数,其参数是从number
到的函数void
。将一个也可以处理未定义数字的函数传递给这个函数是可行的,因为number | undefined
它的类型比number
.
示例 2
这也是一个高阶函数,其参数是从number
to的函数void
,但整个函数可以是未定义的。这会失败,因为如果未定义,func
则在 HOF 内部调用是非法的。func
我认为您在示例 2 中的意思
const testFunc = (func: (param?: number) => void): void => {
func(3);
};
testFunc((a: number) => {
console.log(a);
});
这是一个高阶函数,其参数是从number | undefined
到的函数void
。这失败了,因为传递 HOF 的函数不允许参数是undefined
.
推荐阅读
- linux-kernel - 可动态加载的 Linux 安全模块
- python - 在python中读取可扩展的hdf5数据集(用c ++编写)
- c# - 如何在文本文件中读取和写入用户列表
- python - 在python中使用插入排序对单链表进行排序
- python - 将包含括号和数字的字符串转换为浮点数组
- javascript - Snap.js 为多边形点设置动画 S.easing[this.easing] 不是函数
- node.js - 反应 POST 请求(MERN 堆栈)
- flutter - 尝试实现行时如何修复“位置参数”错误
- javascript - 苗条组件 onLoad
- javascript - 请帮助获取 webelement 的值