typescript - 使用 TS 检查两个可选参数是否已通过或未定义
问题描述
我正在用 React native 和 Typescript 编写一个应用程序,我有一个问题。
让我们想象一下,我们有一个简单的组件,它具有三个属性,一个是必需的,两个是可选的:
interface Props {
requiredProp: string;
optionalPropA: boolean;
optionalPropB: Function;
}
在我的应用程序逻辑中,要么必须传递两个可选属性,要么都不传递它们,我想知道如何使用 TS 进行检查?
我只能想到两种方法来实现这一目标:
- 在不使用 TS 的情况下,只需
if
在之前的某个地方检查我的状况return
- 将两个可选属性合二为一。使用两个键(每个属性一个键)创建一个对象,并创建一个 TS 类型,以确保它们都存在或都不存在
一些例子:
// Should be good because all params were passed
<SimpleComponent
requiredProp={'Hello world'}
optionalPropA={true}
optionalPropB={() => {}}
/>
// Should be good because only required param was passed
<SimpleComponent
requiredProp={'Hello world'}
/>
// Should complain that optionalPropB wasn't passed
<SimpleComponent
requiredProp={'Hello world'}
optionalPropA={true}
/>
// Should complain that optionalPropA wasn't passed
<SimpleComponent
requiredProp={'Hello world'}
optionalPropB={() => {}}
/>
解决方案
您需要为您的功能重载:
这里:
TypeScript 和 React:如何重载高阶组件/装饰器?
您的函数应如下所示:
interface PropsInterface {
requiredProp: string
}
interface OptionalPropsInterface extends PropsInterface {
optionalPropA: string,
optionalPropB: string
}
function simpleComponent(data: PropsInterface): JSX.Element
function simpleComponent(data: OptionalPropsInterface): JSX.Element
function simpleComponent(): {
// ...
}
export {
simpleComponent
}
它现在将检查 2 个重载之一是否匹配。如果不是,它会抛出一个错误/用红色下划线
推荐阅读
- swift - 基于 SwiftUI 变化的动画 NSWindow 的大小变化
- excel - VBA:如何检查 Filter Criteria2 是否存在?
- c++ - 是否可以在二进制图像中使用 openCV findChessboardCorners 函数?
- apache-kafka - KafkaTimeoutError:60.0 秒后无法更新元数据,Python 脚本
- javascript - 我对 .toFixed() 和小数是否正确?
- python - 尝试使用 django-mssql-backend 将 Django 连接到 SQL Server 时出错
- python - 为什么我的 min() 函数在 Python 中不起作用
- wordpress - 如何在没有过滤器的情况下运行 Wordpress wp_query?
- keyboard - 面板中的键盘可访问性 (WCAG),其中包含已分配按钮角色的元素列表
- inheritance - 在 F# 中,如何实现具有父接口和祖父接口的接口?