defaultProps和passthrough

defaultProps和passthrough

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

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' };
}

用法:
<Greet />

一旦我添加了具有任意道具的选项,就会得到以下错误
Property 'name' is missing in type '{}' but required in type 'Readonly<Props>'.

我的问题是:
1)是否有任何已知的方法可以接受任意道具并让默认道具工作?
2)这样好吗(有更好的吗?)接受任意道具的方法?

最佳答案

如果为内部组件定义了道具,则可以将它们交叉(&)在一起,这样所有道具都将具有类型安全性。

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} />;
  }
}

关于reactjs - typescript 3,React defaultProps和passthrough Prop ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54096222/

10-10 01:59