我正在尝试设置变量值的类型,而不是它自己的变量。
type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900';
type StyleSheetStyle = {};
type FontStyleSheetStyle = { [key:FontWeight]:StyleSheetStyle };
const proximaNova = StyleSheet.create({
// '100': { fontFamily:'' },
// '200': { fontFamily:'' },
'300': { fontFamily:'ProximaNova-Light' },
'400': { fontFamily:'ProximaNova-Regular' },
// '500': { fontFamily:'' },
'600': { fontFamily:'ProximaNova-Semibold' },
'700': { fontFamily:'ProximaNova-Bold' },
// '800': { fontFamily:'' },
// '900': { fontFamily:'' }
}: FontStyleSheetStyle);
在flow.org上,这会警告:
18: }: FontStyleSheetStyle); ^ Unexpected token :
我不想这样做:
let proixmaNova: FontStyleSheetStyle = { 100: {} }
proximaNova = StyleSheet.create(proximaNova);
我也有一个附带问题。使用上面的代码,我认为FontStyleSheetStyle是一个密封的对象?怎么能让它需要任何FontWeight作为键和任何其他属性?所以“带有一些必需键的未密封对象”。
答案 0 :(得分:1)
您需要在create function调用中围绕对象添加其他大括号。这样您就可以将对象转换为所需的FontStyleSheetStyle
类型。但如果其余部分输入正确,则根本不需要类型定义。因此,要么添加额外的大括号,要么完全删除类型。
答案 1 :(得分:1)
要回答问题的第二部分,每种类型定义只能有一个索引。为了完成你所要求的,你必须输入"密封"手工类型:
type SealedWithMap = {
[key: string]: string,
normal: StyleSheetStyle,
bold: StyleSheetStyle,
100: StyleSheetStyle,
// ... etc ...
};