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

TypeScript应用程序中的PropTypes

许华清
2023-03-14

使用是否有反应。PropTypes在TypeScript React应用程序中是有意义的,还是这只是“皮带和吊带”的一种情况?

由于组件类是使用Props类型参数声明的:

interface Props {
    // ...
}
export class MyComponent extends React.Component<Props, any> { ... }

添加有什么真正的好处吗

static propTypes {
    myProp: React.PropTypes.string
}

对类的定义?

共有3个答案

艾泰
2023-03-14

正如@afonsoduarte所说。

我要补充的是,您还可以从PropTypes生成Typescript类型,如下所示:

const propTypes = {
  input: PropTypes.shape({
    id: PropTypes.number.isRequired,
    name: PropTypes.string.isRequired,
  }),
};

type MyComponentProps = PropTypes.InferProps<typeof propTypes>;

const MyComponent: FunctionComponent<MyComponentProps > = (props) => {
  // ...
}

MyComponent.propTypes = propTypes;
单修德
2023-03-14

通常,将组件道具维护为TypeScript类型和React并没有多大价值。同时使用PropTypes

以下是一些这样做有用的情况:

  • 发布将由纯JavaScript使用的组件库之类的包

所以,通常是一个关于编译时验证的信任度的问题。

较新版本的TypeScript现在可以根据React推断类型。PropTypesPropTypes.InferreProps),但生成的类型可能难以使用或在代码的其他地方引用。

祁凯泽
2023-03-14

Typescript和PropType有不同的用途。Typescript在编译时验证类型,而PropType在运行时检查。

Typescript在编写代码时很有用:如果您将错误类型的参数传递给React组件,它将警告您,并为您提供函数调用的自动完成功能,等等。

当您测试组件如何与外部数据交互时,例如从API加载JSON时,PropType非常有用。PropTypes将通过打印以下有用消息来帮助您调试(在React的开发模式下)组件失败的原因:

Warning: Failed prop type: Invalid prop `id` of type `number` supplied to `Table`, expected `string`

尽管看起来Typescript和PropType做的是同一件事,但它们实际上并没有重叠。但是可以从Typescript自动生成PropTypes,这样就不必指定两次类型,例如,请参见:

  • https://github.com/milesj/babel-plugin-typescript-to-proptypes
  • https://github.com/grncdr/ts-react-loader#what-确实如此
  • https://github.com/gcanti/prop-types-ts
 类似资料:
  • 问题内容: 在TypeScript React Application中使用有意义吗?还是“皮带和吊带”的情况? 由于组件类是使用类型参数声明的: 有添加任何真正的好处吗 类定义? 问题答案: 将两个组件道具同时保持为TypeScript类型通常没有太大价值。 在某些情况下,这样做很有用: 发布将由普通JavaScript使用的包,例如组件库。 接受并传递外部输入,例如API调用的结果。 使用库中

  • 我试图在ASP.NET Core2.2应用程序(Visual Studio 2019)中执行一个Typescript文件到另一个Typescript文件的简单导入。我没有使用任何其他框架,如Angular。我遇到了无法在运行时为模块文件找到正确路径的问题。 我有两个简单的Typescript文件,我已经放在子文件夹“Typescript”中--它们被命名为“mytsmodule.ts”和“anot

  • 我尝试将其用于typescript绑定: 测试. ts: 没有: 测试. ts: 但当我呼唤那一刻。format(),我得到一个错误。应该很简单,有人能提供一个命令行/导入组合吗?

  • 我正试着做一些代码拆分和修改。js是我想在一个单独的块中隔离的目标包之一。我是这样做的: 但我得到以下错误:。所以我想我应该做一些类似于<代码>时刻的事情。valueOf(currentNb)但我不太确定。有人能解释一下吗?提前谢谢

  • 我有一个TypeScript应用程序。我想将node_modules内的依赖项捆绑到生成的捆绑包中。这是我迄今为止根据这些帖子尝试的内容(是否汇总捆绑包node_modulesbundle.js?,是否汇总捆绑包node_modulesbundle.js?)。 以下是我的汇总配置和我尝试绑定的简单文件: 文件: 使用汇总打字稿时,如何在node_modules中获取依赖项以捆绑到最终输出中?我怀疑

  • 我正在尝试创建一个新的react应用程序: 安装似乎工作正常,但当我尝试的应用程序,我得到一个错误: C:\。。。\我的应用程序\node\u modules\react scripts\scripts\utils\verifyTypeScriptSetup。js:239 appTsConfig。编译器选项[选项]=值^ TypeError:无法在对象的verifyTypeScriptSetup(