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.
