使用 const 创建字符串文字类型
Creating String Literal Type with const
我正在尝试使用一组 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'.
new type as String Literal using a set of const
您不能将 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';
}
这可能是一个合理的妥协:
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 类型时,我都可以使用其中一个常量。以下代码现在有效:
function foo( color: Colors.RGB) {
//...
}
foo(Colors.Red);
我正在尝试使用一组 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'.
new type as String Literal using a set of const
您不能将 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';
}
这可能是一个合理的妥协:
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 类型时,我都可以使用其中一个常量。以下代码现在有效:
function foo( color: Colors.RGB) {
//...
}
foo(Colors.Red);