TypeScriptでcontextTypes
をどのように定義しますか?ReactコンポーネントのcontextTypesをTypeScriptで定義する正しい方法は何ですか?
私は、コンポーネントを持っている(注記:this questionで詳述それがここでを無関係でなければなりませんように私は、ルータの必要な種類がわからないよ)
export class Repos extends React.Component<ReposProps, {}> {
context: {
router: History
}
static contextTypes = {
router: React.PropTypes.object
};
は、それが機能を持っている
public handleSubmit(event: React.FormEvent) {
この関数の最後には、コンテキストを呼び出します。
この同じコードをコンパイルするとき、私は活字体のエラーを受け取った:「プロパティを読み取ることができません 『ルータ』未定義のキャッチされない例外TypeError」コンポーネントがthis.context.router.push(path);
とラインで、私はエラーを受け取り、
public render() {
return (
{/* ... */}
<form onSubmit={this.handleSubmit}>
);
}
}
しかしフォームを持っていますルータにレポを使用するファイル:
ERROR in ./index.tsx
(14,34): error TS2322: Type 'typeof Repos' is not assignable to type 'string | ComponentClass<any> | StatelessComponent<
any>'.
Type 'typeof Repos' is not assignable to type 'StatelessComponent<any>'.
Types of property 'contextTypes' are incompatible.
Type '{ router: Requireable<any>; }' is not assignable to type 'ValidationMap<any>'.
static contextTypes: React.ValidationMap<any> = {
router: React.PropTypes.object
};
にcontextTypesを変更するには、TypeScripを固定しました私はそれが必要だとは思っていませんでした。私はこれらの問題の両方の原因である別の問題を疑う。
TypeScript issue 4785: How to use React contextTypes in Typescript 1.6?での議論によれば、上記のコードは正しいです。役立つなら、TypeScript 1.7.3、React 0.14.7、そしてreact-router 2.0.0を使用しています。
私はコードを共有しています。私は個人的にはまだ 'context'や' router'を使っていません:) – basarat
[物事が壊れている特定のコミットへのリンク](https://github.com/mjohnsonengr/react-router-typescript-tutorial/tree/ 744e90c18edffcc36beecdaf87b2dbf47a783401) - これはTypeScript 1.7.3でコンパイルされましたが、私は1.8.2が壊れていることに気付きました。 w/npm startを実行し、localhost:8080/reposに移動し、2つのテキストフィールドに入力してGoを押すと、Router undefined error happenが表示されます。 – mjohnsonengr
私はTS 1.8.2コンパイルの問題の一時的な修正でそのレポを更新しました。 – mjohnsonengr