2017-05-31 3 views
0

値を繰り返さずにリテラルタイプの読み取り専用オブジェクトを作成する方法を教えてください。 と例の作業リテラルをタイプスクリプトで繰り返さずに作成する

「myLiteralValue」は、明示的に型指定された:私は明示的に入力しないと、私は "繰り返し取り除かれれば、スイッチを作るならば

const createSettings =() => ({ appType: 'myLiteralValue' as 'myLiteralValue' }); 

switch (createSettings().appType) { 
    case 'myLiteralValue': 
    break; 
} 

タイプが文字列に拡大しますmyLiteralValue」

const createSettings =() => ({ appType: 'myLiteralValue' }); 

switch (createSettings().appType) { 
    case 'myLiteralValue': 
    break; 
} 

のconstへAPPTYPEを壊している間は、まだ別の方法ではなく繰り返されます。

const myLiteralValue = 'myLiteralValue'; 
const createSettings =() => ({ appType: myLiteralValue }); 

switch (createSettings().appType) { 
    case 'myLiteralValue': 
    break; 
} 
+0

どのように壊れますか?どういう意味ですか? –

+0

[こちらのドキュメントの一部](https://www.typescriptlang.org/docs/handbook/advanced-types.html#discriminated-unions)は役に立ちますか?私はあなたが "繰り返す"ことによって何を意味するか分からない。あなたはいつも 'const'を使うことができ、typeofを使ってリテラル型を得ることができます。 –

+0

@NitzanTomer私は例を明確にして –

答えて

1

あなたは(この場合は、文字通りのプロパティで)一定のプロパティを宣言するためにreadonly修飾子を使用することができます。

class Settings { 
    constructor(public id: any) { } 
    readonly appType: "myLiteralValue"; 
} 

const createSettings = (id: any) => new Settings(id); 
関連する問題