react-native init AwesomeProject
新鮮なリアクト - ネイティブプロジェクトを作成するには、私は、生成されたApp.jsで、このクラス宣言に<{}>
で混乱していた:フロータイプ注釈:なぜ `ClassName <{}>`?
export default class App extends Component<{}> {
は最終的に私は<{}>
がClass Generic用フロータイプ注釈だったことを考え出しました。
私はgeneric types in Javaに精通しており、それらの有用性を理解しています。
しかし、私はフローアノテーションの目的を理解するのに苦労しています。それは何を達成するのですか?私が知る限り、App
クラスのタイプはObject
であることが検証されています。それは冗長なようだが、それが事実であれば、私はそれがこのreact-native sourceのように<Object>
のように書かれることになる望んでいるだろう、で:
class AnimatedComponent extends React.Component<Object> {
私はこのタイプのチェックの必要性を説明するために見つけることができる唯一の理由はですMDN documentation for extends
:
拡張子の.prototypeは、Objectまたはnullである必要があります。
は、<Object>
の略語ですか?その場合は、string
を指定する型名の代わりに実際の文字列を使用することと似ていますが、これは間違っているようです。たとえば:
// @flow
function concat(a: string, b: string) {
return a + b;
}
// as compared to -->
// @flow
function concat(a: "foo", b: "bar") {
return a + b;
}
- 何
<{}>
注釈の目的があるか、何は、それがコードについて検証していますか? <{}>
は<Object>
に相当しますか?- 私は何かを誤解していますか?
ありがとうございました!
2:NOに関しては、 '{}'注釈は封印されたオブジェクト型を定義するのに対し、 'Object'は開封されています – ftor