Test du tableau de type chaîne dans TypeScript

Comment puis-je tester si une variable est un tableau de chaîne de caractères dans TypeScript? Quelque chose comme ça:

function f(): ssortingng { var a: ssortingng[] = ["A", "B", "C"]; if (typeof a === "ssortingng[]") { return "Yes" } else { // returns no as it's 'object' return "No" } }; 

TypeScript.io ici: http://typescript.io/k0ZiJzso0Qg/2

Edit: J’ai mis à jour le texte pour demander un test pour ssortingng []. C’était seulement dans l’exemple de code précédent.

Vous ne pouvez pas tester la ssortingng[] dans le cas général, mais vous pouvez tester Array assez facilement, comme dans JavaScript https://stackoverflow.com/a/767492/390330

Si vous voulez spécifiquement pour ssortingng tableau de ssortingng , vous pouvez faire quelque chose comme:

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

Une autre option est Array.isArray ()

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

Je sais que cela a été répondu, mais TypeScript a introduit des gardes de type: https://www.typescriptlang.org/docs/handbook/advanced-types.html#typeof-type-guards

Si vous avez un type comme: Object[] | ssortingng[] Object[] | ssortingng[] et que faire quelque chose en fonction du type – vous pouvez utiliser ce type de protection:

 function isSsortingngArray(value: any): value is ssortingng[] { if (value instanceof Array) { value.forEach(function(item) { // maybe only check first value? if (typeof item !== 'ssortingng') { return false } }) return true } return false } function join(value: ssortingng[] | T[]) { if (isSsortingngArray(value)) { return value.join(',') // value is ssortingng[] here } else { return value.map((x) => x.toSsortingng()).join(',') // value is T[] here } } 

Il y a un problème avec un tableau vide en cours de saisie sous forme de ssortingng[] , mais cela pourrait être correct

Essaye ça:

 if (value instanceof Array) { alert('value is Array!'); } else { alert('Not an array'); } 

Voici la solution la plus concise à ce jour:

 function isArrayOfSsortingng(value: any): value is ssortingng[] { if (Array.isArray(value)) { return value.every(item => typeof item === "ssortingng"); } return false; } 

Notez que value.every renverra true pour un tableau vide. Si vous devez retourner false pour un tableau vide, vous devriez retourner !!value.length && value.every(...) au lieu de simplement value.every(...) .

Il n’y a aucun moyen de vérifier le type d’un tableau vide car il n’y a pas d’informations de type à l’exécution.

il y a un petit problème ici parce que le

 if (typeof item !== 'ssortingng') { return false } 

n’arrêtera pas le foreach. Donc, la fonction retournera true même si le tableau ne contient aucune valeur de chaîne.

Cela semble être pour moi:

 function isSsortingngArray(value: any): value is number[] { if (Object.prototype.toSsortingng.call(value) === '[object Array]') { if (value.length < 1) { return false; } else { return value.every((d: any) => typeof d === 'ssortingng'); } } return false; } 

Salutations, Hans