在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

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


你不能在一般情况下测试string[] ,但是你可以很容易地测试Array ,就像在JavaScript中一样https://stackoverflow.com/a/767492/390330

如果你特别想要string数组,你可以这样做:

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

另一个选项是Array.isArray()

if(! Array.isArray(classNames) ){
    classNames = [classNames]
}

我知道这已被回答,但TypeScript引入了类型警卫:https://www.typescriptlang.org/docs/handbook/advanced-types.html#typeof-type-guards

如果你有一个类型: Object[] | string[] Object[] | string[]以及根据什么类型有条件地做些什么 - 您可以使用这种类型的守护:

function isStringArray(value: any): value is string[] {
  if (value instanceof Array) {
    value.forEach(function(item) { // maybe only check first value?
      if (typeof item !== 'string') {
        return false
      }
    })
    return true
  }
  return false
}

function join<T>(value: string[] | T[]) {
  if (isStringArray(value)) {
    return value.join(',') // value is string[] here
  } else {
    return value.map((x) => x.toString()).join(',') // value is T[] here
  }
}

有一个空数组被键入为string[] ,但可能没问题

链接地址: http://www.djcxy.com/p/19311.html

上一篇: Test for array of string type in TypeScript

下一篇: How to check if an object is not an array?