私はReactプロジェクトのために、Typescriptを使ってHigher Order Componentを書いています。これは、基本的にReactコンポーネントを引数として受け取り、それをラップする新しいコンポーネントを返します。しかしTypeScriptを使用してReact Higher Orderコンポーネントの型アノテーション
期待どおりに動作するように、TSは、匿名クラスを 『「エクスポートされた関数の型が持っているか、プライベート名を使用して返す』ことを不平を言っているが、当該
機能:
export default function wrapperFunc <Props, State> (
WrappedComponent: typeof React.Component,
) {
return class extends React.Component<Props & State, {}> {
public render() {
return <WrappedComponent {...this.props} {...this.state} />;
}
};
}
エラーは合理的ですが、返されるクラスのラッパー関数はエクスポートされておらず、他のモジュールのインポートではこの関数は戻り値が何であるか分かりませんが、コンポーネントパスをラップする必要があるため、外部機能へ。
明示的に返品タイプtypeof React.Component
を指定して試すと、このエラーは表示されません。明示的な戻り値の型を持つ問題の
機能:
export default function wrapperFunc <Props, State> (
WrappedComponent: typeof React.Component,
): typeof React.Component { // <== Added this
return class extends React.Component<Props & State, {}> {
public render() {
return <WrappedComponent {...this.props} {...this.state} />;
}
};
}
しかし、私は、このアプローチの有効性に関する一定していません。これは、TypeScriptのこの特定のエラーに取り組むための正しいアプローチと考えられますか? (または、意図しない副作用を他の場所に作成していますか?それとももっと良い方法ですか?)
(編集)ダニエルの提案に従って引用符を変更してください。
詳細な回答はDanielありがとうございます。私はコードを洗いましたが、不要な部分を取り除くことはできませんでした。はいCompStateはこの質問とは無関係です。そして私はあなたの推測が正しい(本当に質問を超えて考えていただければ幸いです)。 CompStateの一部を削除するように質問を修正したので、将来他の人を混乱させる可能性があります。 – shuntksh