为什么需要将功能参数的类型分配给可选类型?

时间:2020-10-08 07:05:48

标签: 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中的特定示例为中心。我有处理程序功能,哪些参数是必需的类型。但是,当我将此处理函数传递给props作为组件时,哪些类型是可选的。无法推断。在处理程序函数中处理重要逻辑时,会发生问题。因为参数可以为空。

1 个答案:

答案 0 :(得分:2)

示例1

这是一个高阶函数,其参数是从numbervoid的函数。将可以处理未定义数字的函数传递给该函数也是可行的,因为number | undefinednumber的类型更广泛。

示例2

这也是一个高阶函数,其参数是从numbervoid的函数,但是整个函数可以不确定。之所以失败,是因为如果未定义func,则在HOF中调用func是非法的。

我认为您在示例2中的意思

const testFunc = (func: (param?: number) => void): void => {
  func(3);
};

testFunc((a: number) => {
  console.log(a);
});

这是一个高阶函数,其参数是从number | undefinedvoid的函数。失败是因为传递给HOF的函数不允许参数为undefined