让我们假设我有
// Foo.js
type PropsType = { cool: boolean };
class Foo extends React.Component<PropsType> {}
// Bar.js
import Foo from './Foo';
type PropsBar = { temp: string };
class Bar extends Foo {
test() {
this.props.cool; // there is no error
this.props.temp;
^^^^ Property not found in object type
}
}
我的问题是,如何将其他Props
传递给Bar
组件?
答案 0 :(得分:2)
你需要让你的超级类通用。就像React.Component
是通用的一样,你的类和函数也是如此。
您可以通过引入类型参数来声明诸如类或函数泛型。
让我们Foo
通用
export default class Foo<T> extends React.Component<FooProps & T> {}
注意传递给泛型超类FooProps & T
的交集类型,写为React.Component
。这意味着Foo.prototype.props
将具有FooProps
中声明的属性以及T
声明的任何属性。
现在,当我们使用Foo
时,例如在extends
子句中,我们需要为T
指定一种类型。
type BarProps = { temp: string };
export default class Bar extends Foo<BarProps> {
constructor(props, context) {
super(props, context);
console.log(this.props.temp);
}
}
如果您希望为不添加其他道具的Foo
消费者保持简洁性,您可以为T
指定默认类型,如
export default class Foo<T = {}> extends React.Component<FooProps & T> {}
export class Bar extends Foo {}
注意:上述所有语法在Flow和TypeScript中均有效。