typescript 如何将常量Map到字符串

c9qzyr3d  于 2023-01-14  发布在  TypeScript
关注(0)|答案(1)|浏览(210)

我有一个type定义,如下所示

type Foo = {
    bold?: boolean,
    italic?: boolean,
    color: Colors <- this is the problem
}

Color必须是这些值中的一个

const col1= '#C62828'
const col2= '#01579B'
const col3 = '#E65100'

我想我用它做了一个enum

enum Colors {
    red: col1,
    blue: col2,
    orange: col3,
}

但这给了我
只有数值枚举才能有计算成员,但此表达式的类型为"#C62828“。如果不需要穷举检查,请考虑改用对象文本。...
然后突出显示col1col2col3
创建这样一个Map的最佳方法是什么,这样我就可以将其用作colortype
1.仅允许通过col1col2col3定义的颜色,并且
1.能够使用传递的颜色的实际值(即#C62828

kokeuurv

kokeuurv1#

您可以使用一个常量和颜色的键值对,例如:

const col1 = '#C62828'
const col2 = '#01579B'
const col3 = '#E65100'

const COLORS = {
    RED: col1,
    BLUE: col2,
    ORANGE: col3,
} as const // as const to type the values as (ex: '#C62828') instead of `string`.

要获取COLORS对象类型的值,请使用以下类型:

type Colors = typeof COLORS[keyof typeof COLORS] // "#C62828" | "#01579B" | "#E65100"

现在可以将类型实现为Object,并且只允许将值添加到COLORS常量。

type Foo = {
    bold?: boolean,
    italic?: boolean,
    color: Colors
}

const implementedFoo: Foo = {
    color: "#01579B"
}

const implementedFoo2: Foo = {
    color: COLORS.BLUE
}

Playground

相关问题