Test pre pole typu string v TypeScripte


Ako môžem otestovať, či je premenná polom reťazcov v TypeScripte? Niečo takéto:

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 tu: http://typescript.io/k0ZiJzso0Qg/2

Upraviť: Aktualizoval som text, aby som požiadal o test pre string[]. Predtým to bolo len v príklade kódu.

Odpoveď č. 1

Všeobecne nemôžete testovať pre string[], ale môžete dosť ľahko testovať pre Array, rovnako ako v JavaScripte https://stackoverflow.com/a/767492/390330 (uprednostňujem Array.isArray(value)).

Ak konkrétne chcete pole string, môžete urobiť niečo takéto:

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[]!');
   }
}

V prípade, že potrebujete skontrolovať pole triedy (nie základného typu)

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

Ak si nie ste istí, že všetky položky sú rovnakého typu

items.every(it => it instanceof MyClassName)

Odpoveď č. 2

Ďalšou možnosťou je Array.isArray()

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

Odpoveď č. 3

Tu je doteraz najstručnejšie riešenie:

function isArrayOfStrings(value: unknown): value is string[] {
   return Array.isArray(value) && value.every(item => typeof item === "string");
}

Upozorňujeme, že value.every vracia true pre prázdne pole. Ak chcete, aby sa pre prázdne pole vrátilo false, pridajte do podmienky value.length > 0:

function isNonEmptyArrayOfStrings(value: unknown): value is string[] {
    return Array.isArray(value) && value.length > 0 && value.every(item => typeof item === "string");
}

V TypeScripte nie sú žiadne informácie o type počas behu (a nebudú, pozri Ciele dizajnu TypeScriptu > Neúmysly, 5), takže neexistuje spôsob, ako zistiť „typ“ prvkov prázdneho poľa. Pre neprázdne pole môžete skontrolovať typ jeho položiek po jednej.

Typový predikát value is string[] zužuje typ value na string[] v príslušnom rozsahu. Toto je funkcia TypeScriptu, skutočný návratový typ funkcie je boolean.

Súvisiace články