使用 Typescript 在 React 函数组件中定义 Props

发布日期:2026-07-15 11:05:03   来源 : 杭州电子商务研究院    浏览量 :9
杭州电子商务研究院 发布日期:2026-07-15 11:05:03  
9

介绍

本指南将为您提供正确定义进入组件的 props 所需的语法,比较和对比将 props 定义为接口类型,并在您需要为可选 props 提供默认值时为您提供有用的提示。

我应该使用哪个关键词?

Typescript 带来了一些很棒的功能,可以以强大的方式扩展 JavaScript,包括以多种方式定义对象结构的能力。在寻找定义对象的最佳方法时,您无疑会遇到各种选项,其中接口是最常见的。如果您查看Typescript 的文档,您可以自己研究这些常见对象定义器之间的区别。本指南将为您提供简短版本。

当你想要定义的不仅仅是对象的结构时,可以使用类:

      class Greeter {
    greeting: string;
    constructor(message: string) {
        this.greeting = message;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}
let greeter = new Greeter('world')
    

接口用于当你想强制执行结构化契约(即你想要传入的内容或想要返回的内容)时:

      interface FullName{
    firstName: string;
    lastName: number;
}

const fullNameObj:FullName = {
    firstName: "Jon",
    lastName: "Snow"
}
    

那么你应该使用哪个来定义 prop?如果你说的是interface,那你就对了。

定义 Props

无论您是刚开始使用 Typescript 和 React,还是经验丰富的老手,希望通过引入钩子向代码库添加更多功能组件,了解定义 props 的不同方法都很重要。

简单而有效

定义 props 的方法之一就是简单地在函数的参数列表中定义它们,如上所示。

例如:

      interface FullName {
    firstName: string;
    lastName: string;
}
function FunctionalComponent(props:FullName){
    // props.firstName
    // props.lastName
}
    

更灵活的方式

在大多数情况下,简单的方法就可以了。但是,如果你想定义默认 props(如果未传入)该怎么办?或者你只是想在组件中使用更简洁的语法?

对于这些情况,你可以利用 JavaScript 语法特性,即解构。这可以让你更灵活地定义你的 props。

      // Using the same FullName interface from the last example
function FunctionalComponent({firstName, lastName}:FullName){
    // firstName
   // lastName
}
    

如果你想添加中间名怎么办?不是每个人都有中间名,所以你想让它可选。解构可以为这个问题提供一个干净的解决方案。

      interface OptionalMiddleName {
    firstName: string;
    middleName?: string;
    lastName: string;
}
function Component({firstName, middleName = "N/A", lastName}:OptionalMiddleName){
    // If middleName wasn't passed in, value will be "N/A"
}
    

现在,每当您需要引用middleName时,如果它不存在,您将获得一个默认值“N/A”。

使用非解构语法实现相同的功能大致如下:

      // using the same OptionalMiddleName interface from above
function Component(props:OptionalMiddleName){
    if(!props.middleName){
        props.middleName = "N/A"
    }
}
    

不算太糟糕,但也不算太好。

不过,一如既往,漂亮的代码有时存在于旁观者的眼中。

使用 React.FC

定义 props 的另一种方法是导入并使用 React 的函数组件类型(简称FC) 。

使用React.FC更加冗长,但确实有一些额外的好处:。

  • 返回类型明确
  • 提供静态属性的类型检查和自动完成(即displayNamedefaultProps
  • 提供children的隐式定义
      const ReactFCComponent: React.FC<{title:string}> = ({children, title}) => {
        return <div title={title}>{children}</div>
    }
    

您可以在此处阅读有关React.FC 的更多优势

你应该使用哪一个?React 社区通常不赞成使用React.FC,因为它太冗长,而且它的好处不值得你为之付出努力和阅读难度。

结论

希望本指南能为您提供良好的参考。一般来说,我喜欢解构进入组件的所有 props,因为它提供了简洁有效的语法。祝您在 Typescript React 之旅中好运!

了解更多

以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据