在字符串值''上的Typescript中对象可能是'undefined'

时间:2019-06-24 14:37:38

标签: javascript reactjs typescript

我是Typescript的新手,目前正在将我们的应用程序从React JSX转换为TS,所以如果我误解了错误,请告诉我。

我在Object is possibly 'undefined' prop上得到了string,该component是从父级string传下来的。 INITIAL_STATE在“父级”的private static INITIAL_STATE = { password: '' }; 中定义为

prop

这意味着子组件中password的{​​{1}}绝对不能为undefined。子组件是

interface InterfaceProps {
  onlyOneLeft?: boolean;
  isEnabled?: boolean;
  signInMethod?: any;
  onUnlink?: any;
  password?: string;
  passwordTwo?: string;
  handleFormSubmit?: any;
  handleInputChange?: any;
}

const ChildComponent = ({ password }: InterfaceProps): any => {
  const regUpCase = new RegExp('^(?=.*[A-Z])');
  const regLwCase = new RegExp('^(?=.*[a-z])');
  const regDigit = new RegExp('^(?=.*[0-9])');
  const regChar = new RegExp('^(?=.*[*@!#%&()^~{}_-])');

  const pwLength = password.length >= 8;
  const pwUpCase = regUpCase.test(password);
  const pwLwCase = regLwCase.test(password);
  const pwChar = regChar.test(password);
  const pwDigit = regDigit.test(password);
  const pwSpecial = pwChar || pwDigit;

  const isInvalid =
    !pwLength || !pwUpCase || !pwLwCase || !pwSpecial || password === '';

  return isInvalid ? (
    ... // return when password isInvalid
  ) : (
    ... // return when password !isInvalid
  );
};

ChildComponent.propTypes = {
  password: PropTypes.string
};

export default ChildComponent;

pwLength上,我在Object is possibly 'undefined' password上看到prop的错误。

{ pwUpCase, pwLwCase, pwChar, pwDigit } password上的prop上,我遇到了Argument of type 'string | undefined' is not assignable to parameter of type 'string'. Type 'undefined' is not assignable to type 'string'.的错误

在这种情况下,我认为props password永远不会是undefined,因为它在父组件中的初始state''

我还需要检查password是否未定义吗?也许正确的方法应该是将isInvalid移到父组件?我希望我不需要,所以任何建议都将非常有帮助。

1 个答案:

答案 0 :(得分:1)

password在界面上是可选的。

因此,您需要将默认值传递给password

赞:

const ChildComponent = ({ password = '' }: InterfaceProps): any => {
-----------------------------------^^^^