npm 包@types/react允许我们在 TypeScript 应用程序中使用 React。我们将组件定义为
@types/react
type Props = {...} type State = {...} export default class MyComponent extends React.Component<Props, State> { }
这里我们必须声明组件道具和状态的类型(在类型变量中)。
在我们声明类型之后,TypeScript 会使用它来验证我们组件的使用情况(传递给它的 props 的形状)。
我想围绕这样的组件创建一个容器。容器将重用组件的 props。但为了创建具有相同 props 的另一个组件,我必须重新声明 props 的类型。或者从原始组件文件中导出它们并导入到容器中:
// original file export type Props = {...} // container file import MyComponent, { Props } from './original'
但我已经MyComponent从该文件导入了。此组件已包含有关其使用的 props 的信息(这要归功于 中的类型变量React.Component)。
MyComponent
React.Component
问题是,如何在不明确导出/导入 props 类型的情况下从组件类本身访问该信息?
我想要这样的东西:
import MyComponent from './MyComponent' type Props = MyComponent.Props // <= here access the component prop types export default class MyContainer extends React.Component<Props, {}> {}
2019:注意到上面的所有答案都已过时,因此这里有一个新的答案。
使用较新的 TS 版本,您可以使用查找类型。
type ViewProps = View['props']
尽管非常方便,但它只适用于类组件。
React typedef 附带一个实用程序,可以从任何组件中提取 props 的类型。
type ViewProps = React.ComponentProps<typeof View> type InputProps = React.ComponentProps<'input'>
这有点冗长,但与类型查找解决方案不同:
所有这些使该解决方案成为最具前瞻性的解决方案:如果您决定从类迁移到钩子,则不需要重构任何客户端代码。