2017-01-05 5 views
1

私はこのタイプを定義しています配列表記を使用して値にアクセスすることなくオブジェクトの値のタイプを定義するにはどうすればよいですか?

type RouteMap = { [k: string]: React.Route }; 

私はこのように適用しようとしていますどの:

const routes: RouteMap = { 
    setDomain: { title: 'Set Domain', component: SetDomain } 
}; 

export default class MyClass extends React.Component<void, void> { 
    render() { 
    return (
     <View style={styles.container}> 
     <NavigatorIOS initialRoute={routes.setDomain} /> 
     </View> 
    ); 
    } 
} 

しかし、それはこのエラーを得ている:

Property 'setDomain' does not exist on type RouteMap. 

私がしようとした場合これは動作します次のようなプロパティにアクセスする:routes['setDomain']しかし、私はそれを避けたいと思います。 TypeScriptが割り当てからキーを推測させる方法はありますか?

答えて

1

それは一種のなんとかmapped typesとだが、typescriptですが、中間の機能の助けを借りずにroutes初期化子で型を推論しません。

type RouteMap<K extends string> = {[T in K]: React.Route} 

// dummy function necessary to infer generic type parameter from the value 
function routeMap<K extends string>(r: RouteMap<K>): RouteMap<K> { return r } 

const routes = routeMap({ 
    setDomain: { title: 'Set Domain', component: SetDomain } 
}); 

もなく、働くあなたは、キータイプを自分で指定する必要がrouteMap()機能なし、醜く見える:

const routes2: RouteMap<'setDomain'> = { 
    setDomain: { title: 'Set Domain', component: SetDomain } 
}; 
関連する問題