Javascript 检查一个条件React prop不满足TS
我理解打字稿有困难。我想定义一个Javascript 检查一个条件React prop不满足TS,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,我理解打字稿有困难。我想定义一个,其中包含一个必需的属性requiredProp,以及一个条件属性extend,如果为true,则允许使用extendedProp e、 g 如果您使用整个道具对象执行此操作,它将起作用。检查props.extend将缩小props上的类型,因此允许使用props.extendedProp: const Component: React.FC<ComponentProps> = (props) => { if (props.extend)
,其中包含一个必需的属性requiredProp
,以及一个条件属性extend
,如果为true,则允许使用extendedProp
e、 g
如果您使用整个道具对象执行此操作,它将起作用。检查
props.extend
将缩小props
上的类型,因此允许使用props.extendedProp
:
const Component: React.FC<ComponentProps> = (props) => {
if (props.extend) {
props.extendedProp();
}
}
弄清楚这些事情的含义是不切实际的(或者可能是不可能的)
这是一个常见问题。您需要在分解结构之前进行检查。一旦你破坏了结构,你就失去了属性之间的关系。谢谢。我以前可能读过关于解构的文章,但直到现在我遇到麻烦,我才想起它。
// types
interface RequiredProps {
requiredProp: 'string';
}
type ExtendedProps =
| {
extend?: false;
extendedProp?: never;
}
| {
extend: true;
extendedProp: Function;
};
type ComponentProps = RequiredProps & ExtendedProps;
// component
const Component: React.FC<ComponentProps> = ({requiredProp, extend, extendedProp}) => {
if (extend) {
extendedProp(); // ERROR: Cannot invoke an object which is possibly 'undefined'.
}
}
if (extendedProp) {
extendedProp(); // no error
}
const Component: React.FC<ComponentProps> = (props) => {
if (props.extend) {
props.extendedProp();
}
}
const Component: React.FC<ComponentProps> = ({requiredProp, extend, extendedProp}) => {
extend = Math.random() > 0.5
if (extend) {
extendedProp();
}
}