反应本机 Typescript Touchableopacity 道具错误

React native Typescript Touchableopacity props error

我使用 Styled 组件和 Typescript 创建了一个可重复使用的按钮。我使 onPress 无效。我正在使用这个按钮来 headStyles。 HeaderStyles 有一个道具名称 headerLeftheaderLeft's 道具的 onPress 是可选的或未定义的。当我将这个道具传递给我的 Button 时,我收到了预期的 Typescript 错误。这是错误:Type '(() => void) | undefined' is not assignable to type '() => void'. Type 'undefined' is not assignable to type '() => void'.ts(2322)。有什么方法可以让 headerLeft props onPress 无效吗?

这是我的可重复使用的 Button 组件:

import React from 'react';
import styled from 'styled-components/native';


type Props = {
  onPress: () => void;
};
const BackButtonContainer = styled.TouchableOpacity`
  padding-vertical: 16px;
  padding-horizontal: 24px;
`;

const Button = ({ onPress }: Props) => {
  return (
    <BackButtonContainer
      onPress={onPress}>
   
    </BackButtonContainer>
  );
};

export default Button;

这是headerStyles

import { StackNavigationOptions } from '@react-navigation/stack';
import React from 'react';
import Button from './buttons;

export const headerStyles: StackNavigationOptions = {
  headerStyle: {
    elevation: 0,
    borderBottomWidth: 0,
    shadowOffset: { height: 0, width: 0 },
  },
  headerTitleAlign: 'center',
  headerTintColor: colors.greyGradient[800],
  headerLeft: (props) =>
    props.canGoBack ? <Button onPress={props.onPress} /> : null, //In here I am getting typescript error

};

如果你确定你有 onPress 来自 headerLeft 道具,你可以使用 ! 来通知打字稿必须有 onPress() 并且它不会是未定义的:

headerLeft: (props) =>
    props.canGoBack ? <Button onPress={props.onPress!} /> : null, 

更多关于non-null assertion operator - !