我已经定义了这种类型:
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仍然推断出赋值中的键?
答案 0 :(得分: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 }
};