2017-12-05 25 views
0

アプリケーションコードのフローオブジェクトタイプ定義からキーを取得できますか(つまり、実行時コードで決まっていますか?)コード内のフローオブジェクトタイプからキーを取得

ユースケース:

type Props = { 
    userID: string, 
    size: number | PhotoSize, 
    subscribePresence: Function, 
    unsubscribePresence: Function, 
    presenceStatus: ?PresenceStatus, 
    photoURL: ?string, 
    userName: ?string, 
}; 

class Photo extends Component<Props> { 
    // ... 
    render() { 
    const { userID, size, presenceStatus } = this.props; 
    // Other props used elsewhere in the component 
    const restProps = _.omit(this.props, ???) 
    } 
} 

renderに慣れていない他の小道具があるので広がりdestructure(const { /* etc */ ... rest} = this.props)が動作しません。しかし、指定されている可能性がある他の小道具(classNameidなど)を取りに行きたいです。

Can ???Object.keys(Props)と類似していますか?私が知る限り、型定義はコンパイルされているので、Propsを実行時コードで参照しようとすると、RuntimeError: Props is not definedがスローされます。

+0

いいえ、すべてのタイプ情報はコンパイル時に削除されます –

答えて

1

フローは静的型分析を提供し、すべてのフローコードは実行時に削除されます(フロー注釈は有効なJavaScriptコードではありません)。

目的を達成するには、フローコードを削除した後で、使用可能なプロップに関する情報を入手する必要があります。あなたのコンポーネントのすべての小道具のためdefaultPropsを設定することにより、それを行うことができ、その後、あなたは書くことができます:

const restProps = _.omit(this.props, Photo.defaultProps) 

設定defaultPropsはとにかく通常は良いアイデアです。

+0

Thanks Tomas; 'defaultProps'のように思える – FeifanZ

関連する問題