当前位置: 首页 > 知识库问答 >
问题:

Proptypes中的React with Typescript组件抛出错误TS 2322

辛渝
2023-03-14

我在React上使用TypeScript,在运行时使用PropTypes验证道具。最近我更新了TypeScript 3.9。3.从那时起,情况就不一样了。鉴于此接口:

interface StoryQuestionsProps extends WithMediaProps {
  questionObject: {
    question: string,
    answer: string,
    nid?: string,
    path?: string,
    type?: string,
  },
  children?: JSX.Element | string,
}

如果我声明这些proptype:

StoryQuestions.propTypes = {
  questionObject: PropTypes.shape({
    question: PropTypes.string.isRequired,
    answer: PropTypes.string.isRequired,
    nid: PropTypes.string,
    path: PropTypes.string,
    type: PropTypes.string,
  }).isRequired,
  children: PropTypes.oneOfType([
    PropTypes.element,
    PropTypes.string,
  ]),
}

抛出错误TS2322:

类型验证器;答案:验证器;nid:必需;路径:必需;类型:必需;}

相反,应为任何类型:

StoryQuestions.propTypes = {
  questionObject: PropTypes.any.isRequired,
  children: PropTypes.oneOfType([
    PropTypes.element,
    PropTypes.string,
  ]),
}

它不会返回错误,但这样我将错过questionObject属性验证。为什么propType。shape()不工作吗?我也尝试过包装propTypes。shape()propTypes。objectOf(PropTypes.shape(…) 但没有效果。


共有1个答案

齐昊苍
2023-03-14

虽然propTypes是一个很好的工具,但在使用TypeScript和React时,不需要使用propTypes。您可以简单地用接口或组件道具的类型别名替换propTypes

一旦定义了接口,就可以安全地从组件中删除propTypes。您可能希望以增量方式进行测试,以防出现任何问题。

话虽如此,我看不出任何问题与故事问题道具的定义方式。

 类似资料:
  • 问题内容: 如何验证提供的道具是组件类(不是实例)? 例如 问题答案: 对于使用新功能的任何人,都会在此拉取请求中添加并于2019年2月10日发布。 该prop类型支持所有组件(本机组件,无状态组件,有状态组件,前向引用,上下文提供者/消费者)。 并且当所有元素都不是时,它会发出警告,并且传递的prop是元素()而不是类型时,它也会发出警告。 最后,您可以像使用其他道具类型一样使用它:

  • 我正在使用Sprock和Spring,当我嘲弄我的一个组件类时,我得到了错误。 > CGLIB-NODEP:3.2.0 CGLIB:3.2.0 Spock-Core:1.0-groovy-2.4 Spring-测试:4.1.4.释放 java.lang.NoClassDefoundError:无法初始化类org.spockframework.mock.runtime.proxybasedmockf

  • 要模拟文件。readAllBytes先抛出错误,然后抛出字节[]。。 getQueryTextFromFile是一个私有方法,从另一个方法调用以获取字节[] 如何在此处模拟以使用Mockito框架引发IOException

  • 我正在尝试将customRepository与CRUDRepository一起使用。获取以下错误: 在JpaRepositoriesRegistrar上声明的@EnableJpaRepositories中定义的ConfigRepository。EnableJpaRepositoriesConfiguration:调用init方法失败;嵌套异常为org。springframework。数据存储库。查

  • 我正在创建一个小型规则引擎,并为其使用drools。我的设计就像开发人员(即我:)将开发dsl,而业务用户可以创建规则(dslr)。 dsl文件 dslr文件 其余的java代码与示例中给出的代码类似。在此代码中,我得到以下错误 错误 而下面的单反效果很好 生成的DRL 注意这个生成的DRL-我可能会得到“e”的重复变量错误。这是另一个问题。但为了解决这个问题,我甚至尝试将dsl中的第二个变量修改

  • 我一直在尝试一些组件,这些组件执行react-cache风格的事情,并在render方法中执行web服务调用,将promise抛出到React.Suspense组件,并在数据存在时重新呈现。它们调用web服务,检查响应,并根据响应呈现或抛出错误到错误边界。我注意到,每当在组件中抛出错误时,它都会呈现两次。第一次callstack看起来正常,第二次callstack包括对invokeGuardedC