reactjs - 如何使用 Typescript 过滤掉 React 组件的 props?
问题描述
我使用两个组件:Test
和Subtest
. 组件应该做一些视觉装饰,Test
并将部分 props 传递给Subtest
组件。一些Subtest
组件道具是可选的,并在其界面上指出。
Test
组件道具接口:
interface TestProps {
prop1: string;
prop2: string;
prop3?: string;
prop4?: string;
}
Test
零件:
export const Test = (props: TestProps) => {
const { prop1, prop2: subProp, ...otherSubtestProps } = props;
const subtestProps: SubtestProps = {
subProp,
...otherSubtestProps
};
return (
<div>
<p>Test component</p>
<ul>
{Object.keys(props).map(prop => (
<li>
{prop}: {props[prop]}
</li>
))}
</ul>
<Subtest {...subtestProps} />
</div>
);
};
Subtest
组件道具接口:
interface SubtestProps {
subProp: string;
prop3?: string;
}
Subtest
零件:
export const Subtest = (props: SubtestProps) => {
return (
<div>
<hr />
<p>Subtest component</p>
<ul>
{Object.keys(props).map(prop => (
<li>
{prop}: {props[prop]}
</li>
))}
</ul>
<hr />
</div>
);
};
如果我Subtest
使用 prop 调用组件prop4
,编译将失败并TS2322
出现错误——这是我期望的行为。
<Subtest subProp="value 2" prop4="value 4" />
然而,当我调用Test
组件时,它会将prop4
值传递给Subtest
组件而没有错误。
<Test prop1="value 1" prop2="value 2" prop4="value 4" />
将调用<Subtest subProp="value 2" prop4="value 4" />
没有错误。
问题是,如何做到这一点,调用<Test prop1="value 1" prop2="value 2" prop4="value4" />
将Subtest
仅使用subProp
和可选的prop3
道具调用组件?
"react": "^16.8.0"
,"typescript": "^3.3.3"
解决方案
对我来说,看起来好像你只是把事情复杂化了,让它看起来很花哨,没有真正的目的,这会导致你遇到问题。
为了便于阅读,我会将您的代码更改为以下内容;
const { prop2, prop3 } = props;
const subtestProps: SubtestProps = {
subProp: prop2,
prop3
};
因为这是你想要的。
推荐阅读
- python - 展平python中字符串列表的列表
- jquery - beforeunload 事件在 Safari 中不起作用
- recursion - 这个函数是尾递归的吗?
- python - 从python中的其他文件调用方法会导致执行整个python文件
- c - *(int32_t *)(a + 4) = b 是什么意思?
- python-3.x - 试图在他们的类中保存实例
- javascript - 如何为类型化类编写单元测试?
- xml - Powershell XmlWriterSettings 将字符标识为选项卡
- php - 如何通过 php 发送 gtag 转换事件?
- sas - 将所有数组值设置为单个值