使用 PropTypes.InferProps 和默认参数时,如何删除对象可能是 'null' TS2531 警告?

How to remove Object is possibly 'null' TS2531 warning when using PropTypes.InferProps and default parameters?

我有一个简单的 React 组件,可以将两个数字相加。它是用 TypeScript 编写的,使用 @types/prop-types.

import React from 'react';
import PropTypes from 'prop-types';

const AddPropsTypes = {
  first: PropTypes.number,
  second: PropTypes.number
};

type Props = PropTypes.InferProps<typeof AddPropsTypes>;
const Add: React.FC<Props> = ({ first = 1, second = 2 }) => {
  return <div>{first + second}</div>;
};

Add.propTypes = AddPropsTypes;

export default Add;

Typescript 抱怨 firstsecond 可能是 'null' ts(2531),但它们有默认参数值。

制作这些 PropTypes.number.isRequired 显然会使警告消失,但我不希望它们成为必需的。

我知道我可以在 jsx 中使用 <div>{(first || 1) + (second || 2)}</div> 使这个警告消失,但我不应该定义默认值两次。目前,我忽略了行上方的警告:

{/* lol https://github.com/Microsoft/TypeScript/issues/27552
// @ts-ignore */}

有什么方法可以定义 PropTypesInferProps 以便它知道默认参数值吗?

使用非空断言运算符!

first! +second!

一个问题我看到没有为数组函数参数定义类型

const Add: React.FC<Props> = ({ first = 1, second = 2 }) => {
  return <div>{first + second}</div>;
};

怎么样

const Add: React.FC<Props> = ({ first = 1, second = 2 }: Props) => {
  return <div>{first + second}</div>;
};

const Add: React.FC<Props> = ({ first = 1, second = 2 }: {
  first: PropTypes.number,
  second: PropTypes.number
}) => {
  return <div>{first + second}</div>;
};

这是一个 proptypes 与打字稿相结合的超级骗子法师额外烦人的东西。我得到的唯一解决方法是使用 "strictNullChecks": false 但这本质上意味着你对待不对待空案例。