我正在创建一个简单的组件,它接受一个可选的道具,但也接受任意的道具传递给它的子组件,但是我不能让这个组合很好地发挥作用。我在这里修改了示例: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)是否有任何已知的方法可以接受任意属性并让defaultProps正常工作?
2)这是好的吗(有更好的吗?)接受任意道具的方法?
发布于 2019-04-03 21:43:53
如果你已经为内部组件定义了属性,你可以将它们相交(&)在一起,这样你就可以在所有的属性上保证类型安全。
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} />;
}
}https://stackoverflow.com/questions/54096222
复制相似问题