2017-05-31 56 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; 
} 

雖然打破了APPTYPE一個const仍然反覆,但以不同的方式:

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);