首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Typescript 3、React defaultProps和passthrough props

Typescript 3、React defaultProps和passthrough props
EN

Stack Overflow用户
提问于 2019-01-09 00:48:05
回答 1查看 579关注 0票数 3

我正在创建一个简单的组件,它接受一个可选的道具,但也接受任意的道具传递给它的子组件,但是我不能让这个组合很好地发挥作用。我在这里修改了示例:Typescript3 Release Notes

代码语言:javascript
复制
import React from 'react';

export interface Props {
  name: string;
  [id: string]: any; // <-- Added to allow acceptance of arbitrary props
}

export class Greet extends React.Component<Props> {
  render() {
    const { name, ...divProps } = this.props;
    return <div {...divProps}>Hello {name.toUpperCase()}!</div>;
  }

  static defaultProps = { name: 'world' };
}

用法:

代码语言:javascript
复制
<Greet />

一旦我添加了具有任意属性的选项,我就会得到以下错误

代码语言:javascript
复制
Property 'name' is missing in type '{}' but required in type 'Readonly<Props>'.

我的问题是:

1)是否有任何已知的方法可以接受任意属性并让defaultProps正常工作?

2)这是好的吗(有更好的吗?)接受任意道具的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-03 21:43:53

如果你已经为内部组件定义了属性,你可以将它们相交(&)在一起,这样你就可以在所有的属性上保证类型安全。

代码语言:javascript
复制
type Props = {
  name: string;
}

type InnerCompProps = {
  color: string,
}

const InnerComp = (props: InnerCompProps) => (<div> the color is { props.color} </div>);

export class Greet extends React.Component<Props & InnerCompProps> {
  static defaultProps = { name: 'world' };

  render() {
    const { name, ...rest } = this.props;
    return <InnerComp {...rest} />;
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54096222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档