英文:
How to check the type of values in an array
问题
以下是翻译好的内容:
我有一个类型为 string[] | object[]
的值,根据数组中值的类型,我想执行不同的操作。是否有一种方法可以检查数组中值的类型?
我尝试过检查数组中的第一个项目的类型,但 TypeScript 不识别它,因此仍然认为它可以是 string[] | object[]
。
我还尝试使用 every
并检查每个值的类型,但 TypeScript 不允许在 string[] | object[]
上使用 every
或 filter
。
英文:
I have a value that has the type string[] | object[]
and depending of the type of the values in the array I want to do different things with it. Is there a way to check the types of the values in the array?
I have tried checking the type of the first item in the array, but TypeScript doesn't recognise that, so it still thinks it can be a string[] | object[]
.
I also tried using every and check the type of every value but TypeScript doesn't allow the use of every or filter on string[] | object[]
答案1
得分: 1
由于您的数组被定义为 string[] | object[]
,因此编写类型断言来确定其最终类型是有意义的。这是如何使用它的示例:
function isStringArr(a_arr: string[] | object[]): a_arr is string[] {
return !a_arr.some(a_item => typeof a_item !== 'string');
}
if(isStringArr(arr)){
console.log(arr); // string[]
}
英文:
Since your array is defined as string[] | object[]
, then it makes sense to write a type predicate to find out what type it ends up being:
function isStringArr(a_arr: string[] | object[]): a_arr is string[] {
return !a_arr.some(a_item => typeof a_item !== 'string');
}
This is how you would use it:
if(isStringArr(arr)){
console.log(arr); // string[]
}
Checking the type in a for
or forEach
loop on every element is also possible, but since your array is either string[]
OR object[]
this doesn't make a whole lot of sense to do.
答案2
得分: 0
const arr: string[] = ['a', 'b', 'c'];
// 检查变量的类型
const isArray = Array.isArray(arr); // 🔍 true
console.log(isArray);
// 检查数组中值的类型
if (Array.isArray(arr)) {
const isStringArray =
arr.length > 0 &&
arr.every((value) => {
return typeof value === 'string';
});
console.log(isStringArray); // 🔍 true
}
英文:
const arr: string[] = ['a', 'b', 'c'];
//check the type of variable
const isArray = Array.isArray(arr); // 👉️ true
console.log(isArray)
//check the type of values in array
if (Array.isArray(arr)) {
const isStringArray =
arr.length > 0 &&
arr.every((value) => {
return typeof value === 'string';
});
console.log(isStringArray); // 👉️ true
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论