ts 含字符串值成员的枚举中不允许使用计算值。
时间: 2023-09-18 09:02:03 浏览: 51
ts中的枚举是一种类型,它允许我们为一组相关的值定义一个命名集合。枚举可以包含字符串值成员,但是不允许在这种类型的枚举中使用计算值。
计算值是指在枚举成员中使用表达式或函数来计算值的情况,例如:
```
enum Enum {
A = "hello".length, // 错误,计算值不允许
B = 10 * 2 // 错误,计算值不允许
}
```
在上面的例子中,我们尝试在字符串值枚举的成员中使用计算值,但是这是不被允许的。字符串值枚举的成员必须直接指定字符串值,而不能使用任何计算。
然而,如果需要使用计算值来定义枚举成员,可以考虑使用数字枚举或常量枚举。数字枚举的成员可以使用表达式或函数来计算值,而常量枚举的成员在编译阶段被内联到代码中,因此也可以使用计算值。
总之,在使用含有字符串值成员的枚举时,要注意不允许使用计算值。如果需要使用计算值,可以考虑使用数字枚举或常量枚举来替代。
相关问题
ts 通过字符串值 获取枚举
在 TypeScript 中,可以通过字符串值获取枚举值的方法如下:
```typescript
enum MyEnum {
Foo = "foo",
Bar = "bar",
Baz = "baz"
}
function getEnumValue(str: string): MyEnum | undefined {
for (const key in MyEnum) {
if (MyEnum[key] === str) {
return MyEnum[key] as MyEnum;
}
}
return undefined;
}
const val1 = getEnumValue("foo"); // MyEnum.Foo
const val2 = getEnumValue("unknown"); // undefined
```
在这个例子中,我们定义了一个名为 `MyEnum` 的枚举类型,它有三个值:`Foo`、`Bar` 和 `Baz`。然后,我们定义了一个函数 `getEnumValue`,它接受一个字符串参数 `str`,并在枚举类型中查找匹配的值。如果找到了匹配的值,则返回该值;否则返回 `undefined`。最后,我们使用 `getEnumValue` 函数获取了两个枚举值,分别是 `MyEnum.Foo` 和 `undefined`。
ts类型 对象key必须来源于枚举值
在 TypeScript 中,如果你定义了一个对象类型,那么这个对象的 key 必须来源于一个枚举值。这是因为 TypeScript 在编译时需要确定对象的 key 类型,从而进行类型检查。
例如,假设你定义了一个枚举类型:
```typescript
enum Color {
Red,
Green,
Blue
}
```
你可以使用这个枚举类型来定义一个对象类型,其中 key 必须是 Color 枚举中定义的值:
```typescript
type ColorMap = {
[key in Color]: string
}
const colors: ColorMap = {
[Color.Red]: 'red',
[Color.Green]: 'green',
[Color.Blue]: 'blue'
}
```
在上面的例子中,ColorMap 类型定义了一个对象类型,其中 key 必须是 Color 枚举中定义的值,而 value 必须是字符串类型。你可以使用 ColorMap 类型来定义一个对象 colors,其中每个 key 都对应一个字符串值。
如果你尝试给 colors 对象添加一个不在 Color 枚举中定义的 key,TypeScript 编译器就会报错。