使用const创建字符串文字类型

时间:2016-05-31 00:29:19

标签: typescript string-literals

我尝试使用一组const将新类型定义为String Literal。显然,TypeScript并不喜欢这个想法。我究竟做错了什么? 这是一个重新创建错误的简单案例。

module Colors {

    export const Red = '#F00';
    export const Green = '#0F0';
    export const Blue = '#00F';

    export type RGB = Colors.Red | Colors.Green | Colors.Blue; // Error!
}

var c: Colors.RGB = Colors.Green;

错误消息是

Module 'Colors' has no exported member 'Red'.

2 个答案:

答案 0 :(得分:2)

  

使用一组const

作为String Literal的新类型

您不能将const用作类型注释。它们位于不同的声明空间https://basarat.gitbooks.io/typescript/content/docs/project/declarationspaces.html

修复

module Colors {

    export const Red = '#F00';
    export const Green = '#0F0';
    export const Blue = '#00F';

    export type RGB = '#F00' | '#0F0' | '#00F';
}

答案 1 :(得分:0)

这可能是一个合理的妥协:

module Colors {

    export type RGB = '#F00' | '#0F0' | '#00F';

    export const Red: RGB = '#F00';
    export const Green: RGB = '#0F0';
    export const Blue: RGB = '#00F';

}

这样,每次期望Colors.RGB类型时,我都可以使用其中一个consts。以下代码现在有效:

function foo( color: Colors.RGB) {
    //...
}

foo(Colors.Red);