【发布时间】:2018-06-28 13:16:10
【问题描述】:
我创建了一个简单的 HOC,它在组件中注入了一个方法 translate。
export interface IMessageProps {
translate: (key: string) => string;
}
export const message = <P extends object>(
Component: React.ComponentType<P & IMessageProps>
): React.SFC<P & IMessageProps> => (props: P) => {
const translate = (key: string): string => messages[key];
return <Component {...props} translate={translate}/>;
};
用法:
class MyComponent extends React.Component<IMessageProps, {}> {
render() {
return (
<>{this.props.translate('hello.world')}</>
);
}
}
export default message(MyComponent);
当我想调用我的组件 <MyComponent/> 时出现问题,因为 tsc 抱怨属性 translate 没有传递给 MyComponent 并期望像 <MyComponent translate={...}/> 这样的东西。
Type '{}' is not assignable to type 'IntrinsicAttributes & IMessageProps & { children?: ReactNode; }'.
Type '{}' is not assignable to type 'IMessageProps'.
Property 'translate' is missing in type '{}'.
所以我的问题是:如何绕过这个虚假错误?我不想在 IMessageProps 中设置 translate 可选,因为 tslint 会抱怨 Cannot invoke an object which is possibly 'undefined'。
【问题讨论】:
标签: reactjs typescript