热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用打字稿反应组件子类型检查

如何解决《用打字稿反应组件子类型检查》经验,为你挑选了1个好方法。

这是场景:

我有一个自定义组件:

class MyComponent extends React.Component {
  render () {
    return (
      
          // <- valid child
      
    )
}

class MyComponent extends React.Component {
  render () {
    return (
      
          // <- No! It's not right shape
      
    )
}

以及引用的SuperComponent和SubComponent1是:

interface superPropsType = {
  children: ReactElement
}
class SuperComponent extends React.Component { ... }


interface subPropsType1 = {
  name: string
}
class SubComponent1 extends React.Component { ... }


interface subPropsType2 = {
  title: string
}
class SubComponent2 extends React.Component { ... }

我希望SubComponent1是SuperComponent的唯一有效子元素,也就是说,如果我将Type或Other类型作为其子元素,希望Typescript可以引发错误。

看来typescript仅检查的子项应具有ReactElement的类型,但ts不会检查该子项(即subPropsType1)的道具形状,即是否将字符串或数字作为SuperComponent的子项放置,ts会抱怨类型要求不满足,但是如果我在此处放置任何jsx标记(它将被转换为ReactElement),ts会保持沉默

任何的想法 ?如果需要在此处发布任何配置,请随时询问

非常感谢任何想法和解决方案



1> Matt McCutch..:

从TypeScript 3.1开始,所有JSX元素都经过硬编码以具有该JSX.Element类型,因此无法接受某些JSX元素,而不能接受其他元素。如果要进行这种检查,则必须放弃JSX语法,定义自己的元素工厂函数,该函数可以包装React.createElement但返回不同组件类型的不同元素类型,并手动写入对该工厂函数的调用。

有一个开放的建议,该建议可能会在TypeScript 3.2(将于2018年11月下旬发布)之后立即实施,以便TypeScript根据给定组件类型的工厂函数的实际返回类型将类型分配给JSX元素。如果实现了这一点,您将能够定义自己的工厂函数,该函数将包装React.createElement并使用jsxFactory编译器选项指定它,并且您将获得其他类型信息。@types/react甚至可能会更改,以便React.createElement提供更丰富的类型信息,如果可以做到这一点而又不会对不关心功能的项目造成有害影响的话;我们将不得不拭目以待。


推荐阅读
  • 小编给大家分享一下TypeScript2.7有什么改进,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 前言小伙伴们大家好。从今天开始我们将从 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • React项目中运用React技巧解决实际问题的总结
    本文总结了在React项目中如何运用React技巧解决一些实际问题,包括取消请求和页面卸载的关联,利用useEffect和AbortController等技术实现请求的取消。文章中的代码是简化后的例子,但思想是相通的。 ... [详细]
  • 本文介绍了自学Vue的第01天的内容,包括学习目标、学习资料的收集和学习方法的选择。作者解释了为什么要学习Vue以及选择Vue的原因,包括完善的中文文档、较低的学习曲线、使用人数众多等。作者还列举了自己选择的学习资料,包括全新vue2.5核心技术全方位讲解+实战精讲教程、全新vue2.5项目实战全家桶单页面仿京东电商等。最后,作者提出了学习方法,包括简单的入门课程和实战课程。 ... [详细]
  • 接口我们使用接口来定义对象的类型。接口是对象的状态(属性)和行为(方法)的抽象(描述)简单理解就是:为我们的代码提供一种约定我们使用关键字interface来声 ... [详细]
author-avatar
手机用户2602899031
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有