私はReactプロジェクトでTypescriptを使用しようとしていますが、HOCが機能するための型を取得するのに苦労しています。ここで私はとのトラブルを抱えています何披露する最小限の例です。Typescriptより高次のコンポーネントがデコレータとして
const withDecorator =
(Wrapped: React.ComponentType): React.ComponentClass =>
class withDecorator extends Component {
render() {
return <Wrapped {...this.props} />
}
}
@withDecorator
class Link extends Component<object, object> {
render() { return <a href="/">Link</a> }
}
これはエラーを返します:
'Unable to resolve signature of class decorator when called as an expression.
Type 'ComponentClass<{}>' is not assignable to type 'typeof Link'.
Type 'Component<{}, ComponentState>' is not assignable to type 'Link'.
Types of property 'render' are incompatible.
Type '() => string | number | false | Element | Element[] | ReactPortal | null' is not assignable to type '() => Element'.
Type 'string | number | false | Element | Element[] | ReactPortal | null' is not assignable to type 'Element'.
Type 'null' is not assignable to type 'Element'.'
このエラーが発生した理由を、私は本当に理解していません。私は間違ったことをする必要があります。私が小道具を導入すると、事態はさらに毛がいっぱいになります。
私は正しいソリューションを高く評価したいと思いますが、なぜこのエラーが最初に発生するのかを理解することにも非常に興味があります。
ありがとうございます!値を返す
ありがとうございます!私は、クラスのシグネチャを変更する関数を持つクラスをラップするための構文的な砂糖としてデコレータを考えていたと思います。私はそれがいくつかの図書館でそのように使われているのを見ますが、Typescriptはデコレータがどのように機能するかについてより慎重な意見を持っています。 – genuinelycurious