Typescript: 如何确定字符串变量是否在枚举中?

21 浏览
0 Comments

Typescript: 如何确定字符串变量是否在枚举中?

这不是在TypeScript中检查值是否存在于枚举中的重复内容,该问题是针对将类型枚举与枚举值进行比较的。

关于如何在TypeScript中检查字符串或字符串字面值与枚举值相匹配的问题,没有其他帖子。原因是我通过API接收数据,所以它的原始类型是字符串。

代码:

enum Method {
    Get = 'get',
    Put = 'put',
    Post = 'post',
    Patch = 'patch',
    Delete = 'delete'
}
console.log(Method);
console.log('get' in Method);
console.log(Object.values(Method));
console.log(Object.values(Method).includes('get'));

输出:

src/libs/async-express/test.ts:12:44 - error TS2345: Argument of type '"get"' is not assignable to parameter of type 'Method'.
12 console.log(Object.values(Method).includes('get'));

在Java中可以这样做:

public static boolean contains(String test) {
    for (Choice c : Choice.values()) {
        if (c.name().equals(test)) {
            return true;
        }
    }
    return false;
}

在TypeScript中有没有标准的方法可以实现这个。

0
0 Comments

Typescript: 如何确定字符串变量是否在枚举中?

在Typescript中,我们经常需要判断一个字符串变量是否属于一个枚举类型。下面是一种简单的解决方法。

最简单的方法是使用类型转换。我们可以将枚举类型转换为字符串数组,然后使用includes方法来判断字符串变量是否存在于该数组中。

// 隐式转换
const allMethods: string[] = Object.values(Method);
console.log(allMethods.includes("get"));
// 显式转换
console.log((Object.values(Method) as string[]).includes("get"));

以上代码中,我们首先使用Object.values方法将枚举类型Method转换为字符串数组allMethods。然后使用Array的includes方法判断字符串"get"是否在该数组中。

需要注意的是,在第二个例子中,我们使用了显式转换,将Object.values的返回值转换为string[]类型。这是因为Object.values返回的类型是(string | number)[],而includes方法只能在string[]类型上使用。

通过以上方法,我们可以轻松地判断一个字符串变量是否属于一个枚举类型。希望这篇文章对您有所帮助!

0
0 Comments

问题:在Typescript中如何确定一个字符串变量是否在枚举中?

在Typescript中,有时我们需要确定一个字符串变量是否在枚举中。但是,直接使用Object.values方法可能会导致类型不准确的问题。为了避免这个问题,我们可以使用类型注解来解决。通过给Object.values添加类型注解Method[],可以将其类型从Method[]扩大。

然而,如果我们需要成功缩小类型,就需要使用类型守卫(type guard)。否则,我们将无法将变量传递给只接受Method类型的其他函数。

下面是一个类型守卫的示例代码:

// 定义类型守卫函数
const isMethod = (maybeMethod: string): maybeMethod is Method => {
  // 将Method的值显式地定义为字符串数组,以便与可能的无效方法进行比较
  const validMethods: string[] = Object.values(Method);
  return validMethods.includes(maybeMethod);
};
// 演示类型缩小的函数
const foo = (maybeMethod: string) => {
  if (isMethod(maybeMethod)) {
    // 编译器成功地缩小了类型
    const clone = maybeMethod; // (parameter) maybeMethod: Method
  }
  if (Object.values(Method).includes(maybeMethod as Method)) {
    // 类型实际上并没有被缩小
    // maybeMethod仍然是一个字符串
    const clone = maybeMethod; // (parameter) maybeMethod: string
  }
};

通过使用类型守卫,我们可以在确定一个字符串变量是否在枚举中时,成功地缩小变量的类型,以便在其他只接受特定类型的函数中使用。

0
0 Comments

TypeScript: 如何确定字符串变量是否属于枚举类型?

在 TypeScript 中,有时候我们需要确定一个字符串变量是否属于某个枚举类型。下面是一个解决这个问题的方法。

方法一:

我们可以使用 `Object.values()` 方法将枚举类型转换为数组,然后使用 `includes()` 方法判断字符串是否存在于数组中。

Object.values(Method).includes(type as Method);

需要注意的是,这种方法只适用于能够保证字符串变量 `type` 一定属于枚举类型 `Method` 的情况。如果不能保证,最好还是使用方法二。

方法二:

我们可以先将枚举类型转换为数组,然后使用 `includes()` 方法判断字符串是否存在于数组中。

const methods = Object.values(Method) as Method[];
methods.includes(type as Method);

这种方法可以确保安全性,即使 `type` 不属于枚举类型 `Method`,也不会出错。

我们可以根据具体情况选择使用方法一或方法二来确定一个字符串变量是否属于枚举类型。

0