2017-09-15 4 views
0

だが、私はこのようになりますコンポーネントCardを、持っているとしましょうinjectIntl​​()でコンポーネントを反応させるのラップ後に失われますtitle属性の型チェックが

<Card title="Example" /> 

私はreact-intlからinjectIntl()と、このコンポーネントをラップする必要があり、そうintlコンテキストが注入されます。私はそのようにこれを行う:

import * as React from 'react'; 
import {injectIntl} from 'react-intl'; 

interface Props { 
    title: string; 
} 

class Component extends React.Component<Props, null> { 
    // .. 
} 

export const Card = injectIntl(Component); 

は今、私は属性titleなしCardコンポーネントを使用することができます。

<Card /> 

これは、typescriptコンパイラでは問題ないようです。ランタイムエラーもありません。私はコンパイラが次のようなエラーをスローすることを期待していました:

Property 'title' is missing in type '{}'. 

この動作の原因はどこですか?なぜそれはこのようなものですか?この問題を解決するには?

ありがとうございます!

答えて

1

TL; DR:@types/react-intlパッケージをインストールする必要があります。

react-intlinject.jsのソースで表示されているように、パッケージは型名を使用しません。 injectIntlによって返されるコンポーネントは、Cardとは完全に異なるコンポーネントです。 @types/react-intlパッケージのタイプは、欠落しているタイプの注釈を追加します。

+0

ありがとう@トマシュ!あなたの答えは正しい方向に私を指摘しました。実際に私は型をインストールしなかったので、typescriptはコンパイル時に何を検証するのか分からなかった。多分あなたはそのヒントを使ってあなたの質問を更新できますか? https://www.npmjs.com/package/@types/react-intl – Robin

+0

@Robin回答が更新されました。いいキャッチ!私は、Typescriptにタイプ注釈の外部リポジトリがあることを忘れていました。 –

関連する問題