在 TypeScript 中测试字符串类型的数组

新手上路,请多包涵

如何测试变量是否是 TypeScript 中的字符串数组?像这样的东西:

 function f(): string {
    var a: string[] = ["A", "B", "C"];

    if (typeof a === "string[]")    {
        return "Yes"
    }
    else {
        // returns no as it's 'object'
        return "No"
    }
};

TypeScript.io 在这里: http ://typescript.io/k0ZiJzso0Qg/2

编辑:我更新了文本以要求对字符串 [] 进行测试。这只是在之前的代码示例中。

原文由 Sean Kearon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 862
2 个回答

在一般情况下,您无法测试 string[] Array 但您可以很容易地测试 --- 与 JavaScript https://stackoverflow.com/a/767492/390330 相同(我更喜欢 Array.isArray(value) )。

如果您特别想要 string 数组,您可以执行以下操作:

 if (Array.isArray(value)) {
   var somethingIsNotString = false;
   value.forEach(function(item){
      if(typeof item !== 'string'){
         somethingIsNotString = true;
      }
   })
   if(!somethingIsNotString && value.length > 0){
      console.log('string[]!');
   }
}

如果您需要检查一个类的数组(不是基本类型)

 if(items && (items.length > 0) && (items[0] instanceof MyClassName))

如果您不确定所有项目都是同一类型

items.every(it => it instanceof MyClassName)

原文由 basarat 发布,翻译遵循 CC BY-SA 4.0 许可协议

参考类型保护( https://www.typescriptlang.org/docs/handbook/advanced-types.html#typeof-type-guards ),您可以执行以下操作 ->

 /**
 * type-guard function to check at run-time if all the elements inside
 * from the array are strings
 * @param array
 * @returns - boolean, true if the array is string array
 */
export function isStringArray(array: unknown[]): array is string[] {
  return array.every((element) => typeof element === 'string')
}

原文由 Nicolas Montone 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进