首页 > 解决方案 > 为什么所需类型的函数参数可分配给可选类型?

问题描述

可选类型 → 必需类型

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 中的具体示例。我有处理函数,其中参数是必需的类型。但是,当我将此处理函数作为组件传递给道具时,哪些类型是可选的。无法推断。在处理函数中处理重要逻辑时会出现问题。因为参数可以为空。

标签: typescript

解决方案


示例 1

这是一个高阶函数,其参数是从number到的函数void。将一个也可以处理未定义数字的函数传递给这个函数是可行的,因为number | undefined它的类型比number.

示例 2

这也是一个高阶函数,其参数是从numberto的函数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.


推荐阅读