ts 含字符串值成员的枚举中不允许使用计算值。
时间: 2023-09-18 18:02:03 浏览: 188
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中enum成员不能是数字字符串,那么怎么让成员是数字字符串,比如01,10等的enum或者对象,按顺序格式化成数组呢
在TypeScript(TS)中,虽然标准的枚举(enum)成员不能直接指定为数字字符串,如"01", "10",但你可以通过一些技巧绕过这个限制。实际上,你可以创建一个自定义类型的枚举(可以称为“数字字符串枚举”),或者使用联合类型结合数组来实现类似的功能。
**自定义类型枚举示例**:
```typescript
type NumberString = '01' | '10'; // 定义一个只允许01和10的枚举类型
// 类似于枚举,但不是内置的enum类型
enum CustomEnum extends NumberString {
Item1,
Item2
}
function formatArray(enumValues: typeof CustomEnum): string[] {
return Array.from(CustomEnum).map((value) => `${value}`);
}
console.log(formatArray(CustomEnum)); // 输出:['01', '10']
```
**数组或对象格式化示例**:
如果你想按照顺序生成一个数组,你可以创建一个对象,并利用索引来关联数字字符串:
```typescript
const enumWithNumbers: Record<number, string> = {
0: '01',
1: '10'
};
function formatAsArray(): string[] {
return Object.values(enumWithNumbers).sort();
}
console.log(formatAsArray()); // 输出:['01', '10']
```
这两种方法都可以让你按照特定顺序生成包含数字字符串的序列,尽管它们并不是传统意义上的枚举。
阅读全文