reactjs - 使用打字稿限制反应孩子的有效道具
问题描述
我在一些子组件周围有一个包装器组件,我想用它来动态地操纵它们的道具。我的问题是,当孩子的道具类型无效时,我想要一种方法让 Typescript 无法编译,但找不到解决方法。我在这里设置了一个代码沙箱,相关部分在下面的代码段中:
const ValidChild = (props: TestProps) => (
<span>
Foo: {props.foo}, Bar: {props.bar}
</span>
);
const InvalidChild = (props: OtherProps) => <span>Beep: {props.beep}</span>;
const ExtendedValidChild = (props: ExtendedTestProps) => (
<span>
Foo: {props.foo}, Bar: {props.bar}, Baz: {props.baz.toString()}
</span>
);
const Wrapper = ({ children }: { children: React.ReactElement<TestProps> }) => {
return React.cloneElement(children, { foo: "BEEP", bar: 2 });
};
const App = () => {
return (
<Wrapper>
<InvalidChild beep="a" />
</Wrapper>
);
};
type TestProps = {
foo: string;
bar: number;
};
type ExtendedTestProps = {
foo: string;
bar: number;
baz: boolean;
};
type OtherProps = {
beep: "a" | "b";
};
我想要的是在向组件提供ValidChild
或ExtendedValidChild
组件时编译和运行打字稿Wrapper
,但在提供组件时失败InvalidChild
。我不知道我可以从这里去哪里,所以任何帮助都会受到欢迎。
编辑:
经过进一步调查,这似乎是其他人面临的一个现存问题,这可以在这个问题的已接受答案的评论中看到。如果有人可以提供帮助,我仍然想要一个解决方案,但看起来这是一个长期存在的利基问题,可能没有潜在的解决方案。
解决方案
推荐阅读
- javascript - 停止捕获(录制)后,iOS 13 无法播放音频(Web Audio API)
- spring - 将 spring 数据配置连接到 IBM DB2 z/os 时出现异常
- primefaces - PrimeFaces 日期选择器弹出窗口未显示
- r - 在不使用 ifelse() 的情况下,我们如何在 R 中创建 if 语句来评估逻辑值向量
- android - 有没有办法检查计时器是否正在使用 Timer Java 类运行?
- rust - 我得到了特征绑定`T:sns_pub::_IMPL_DESERIALIZE_FOR_Message::_serde::Serialize`不满意
- python - 如何从python中的字典中随机选择一定比例的键值对?
- selenium-chromedriver - 引发未知的“非有限双值”Javascript 错误
- amazon-web-services - 只希望我的网站从我的网站和网络服务器获取和发布
- reactjs - 在 FramerX 中设置 AG-Grid 组件