TypeScript 是一种向 JavaScript 代码添加类型定义的常用方法。TypeScript 天然支持 JSX——只需在项目中添加 @types/react 和 @types/react-dom 即可获得完整的 React Web 支持。
安装
所有的 生产级 React 框架 都支持使用 TypeScript。请按照框架特定的指南进行安装:
在现有 React 项目中添加 TypeScript
使用下面命令安装最新版本的 React 类型定义:
npm install --save-dev @types/react @types/react-dom然后在 tsconfig.json 中设置以下编译器选项:
- 必须在
lib中包含dom(注意:如果没有指定lib选项,默认情况下会包含dom)。 jsx必须设置为一个有效的选项。对于大多数应用程序,preserve应该足够了。 如果你正在发布一个库,请查阅jsx文档 以选择合适的值。
在 React 组件中使用 TypeScript
使用 TypeScript 编写 React 与使用 JavaScript 编写 React 非常相似。与组件一起工作时的关键区别是,你可以为组件的 props 提供类型。这些类型可用于正确性检查,并在编辑器中提供内联文档。
以 快速入门 指南中的 MyButton 组件 为例,我们可以为按钮的 title 添加一个描述类型:
function MyButton({ title }: { title: string }) { return ( <button>{title}</button> ); } export default function MyApp() { return ( <div> <h1>欢迎来到我的应用</h1> <MyButton title="我是一个按钮" /> </div> ); }
这种内联语法是为组件提供类型的最简单方法,但是一旦你开始描述几个字段,它可能变得难以管理。相反,你可以使用 interface 或 type 来描述组件的 props:
interface MyButtonProps { /** 按钮文字 */ title: string; /** 按钮是否禁用 */ disabled: boolean; } function MyButton({ title, disabled }: MyButtonProps) { return ( <button disabled={disabled}>{title}</button> ); } export default function MyApp() { return ( <div> <h1>Welcome to my app</h1> <MyButton title="我是一个禁用按钮" disabled={true}/> </div> ); }
描述组件 props 的类型可以根据需要变得简单或复杂,但它们应该是使用 type 或 interface 描述的对象类型。你可以在 对象类型 中了解 TypeScript 如何描述对象,但你可能还对使用 联合类型 描述可以是几种不同类型之一的 prop,以及在 从类型创建类型 指南中参考更高级的用例。
Hooks 示例
来自 @types/react 的类型定义包括内置的 Hook,因此你可以在组件中使用它们,无需任何额外设置。它们是根据你在组件中编写的代码构建的,所以你会得到很多 类型推断,并且理想情况下不需要处理提供类型的细节。
但是,我们可以看一下如何为 Hook 提供类型的几个示例。
useState
useState Hook 会重用作为初始 state 传入的值以确定值的类型。例如:
// 推断类型为 "boolean"
const [enabled, setEnabled] =