我尝试使用一组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'.
答案 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);