2017-07-15 11 views
1

変数値の型を設定しようとしていますが、変数自体は設定していません。オブジェクトの値をタイプに設定する

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/tryでは、これは警告している:私はしたくない

18: }: FontStyleSheetStyle); 
    ^Unexpected token : 

let proixmaNova: FontStyleSheetStyle = { 100: {} } 
proximaNova = StyleSheet.create(proximaNova); 

は、私はまた、サイド疑問を持っていました。上記のコードでは、FontStyleSheetStyleはシールされたオブジェクトだと思いますか?どのようにしてFontWeightをキーとして必要とすることができますか?したがって、「必要なキーを持つ封印されていないオブジェクト」です。

答えて

1

create関数呼び出し内でオブジェクトの周りに追加のカッコを追加する必要があります。この方法でオブジェクトを希望のFontStyleSheetStyleタイプにキャストします。しかし、残りが正しくタイプされていれば、タイプ定義はまったく必要ないはずです。そのため、追加のブレースを追加するか、タイプを完全に削除してください。

+0

ありがとうございましたJan!私はそれが動作すると思います。あなたはseoncdの部分について知っていますか、「いくつかの必要な鍵で封印されていないオブジェクト」を作る方法は? – ystal

1

質問の2番目の部分に答えるには、タイプ定義ごとに1つのインデックスしか持てません。あなたが求めていることを達成するためには、手で "密封"タイプをタイプする必要があります:

type SealedWithMap = { 
    [key: string]: string, 
    normal: StyleSheetStyle, 
    bold: StyleSheetStyle, 
    100: StyleSheetStyle, 
    // ... etc ... 
}; 
+0

非常に面白い、ありがとう! – ystal

関連する問題