可选类型→必需类型
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中的特定示例为中心。我有处理程序功能,哪些参数是必需的类型。但是,当我将此处理函数传递给props作为组件时,哪些类型是可选的。无法推断。在处理程序函数中处理重要逻辑时,会发生问题。因为参数可以为空。
答案 0 :(得分:2)
示例1
这是一个高阶函数,其参数是从number
到void
的函数。将可以处理未定义数字的函数传递给该函数也是可行的,因为number | undefined
比number
的类型更广泛。
示例2
这也是一个高阶函数,其参数是从number
到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
。