2017-05-31 62 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);