如何在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"
}
};
Run Code Online (Sandbox Code Playgroud)
TypeScript.io在这里:http://typescript.io/k0ZiJzso0Qg/2
编辑:我已经更新了文本,要求测试string [].这只是在之前的代码示例中.
bas*_*rat 135
您无法string[]在一般情况下进行测试,但您可以Array像在JavaScript中一样轻松地进行测试/sf/answers/53724471/
如果您特别想要string阵列,您可以执行以下操作:
if (value instanceof Array) {
var somethingIsNotString = false;
value.forEach(function(item){
if(typeof item !== 'string'){
somethingIsNotString = true;
}
})
if(!somethingIsNotString && value.length > 0){
console.log('string[]!');
}
}
Run Code Online (Sandbox Code Playgroud)
gri*_*son 44
另一个选项是Array.isArray()
if(! Array.isArray(classNames) ){
classNames = [classNames]
}
Run Code Online (Sandbox Code Playgroud)
axm*_*rnv 14
这是迄今为止最简洁的解决方案:
function isArrayOfStrings(value: any): boolean {
return Array.isArray(value) && value.every(item => typeof item === "string");
}
Run Code Online (Sandbox Code Playgroud)
请注意,value.every将返回true一个空数组.如果需要返回false一个空数组,则应该添加value.length条件子句:
function isNonEmptyArrayOfStrings(value: any): boolean {
return Array.isArray(value) && value.length && value.every(item => typeof item === "string");
}
Run Code Online (Sandbox Code Playgroud)
由于运行时没有类型信息,因此无法检查空数组的类型.
尝试这个:
if (value instanceof Array) {
alert('value is Array!');
} else {
alert('Not an array');
}
Run Code Online (Sandbox Code Playgroud)
我知道已经解决了这个问题,但是TypeScript引入了类型防护:https : //www.typescriptlang.org/docs/handbook/advanced-types.html#typeof-type-guards
如果您有一个类似:的类型,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
}
}
Run Code Online (Sandbox Code Playgroud)
将空数组键入为时出现问题string[],但这可能没问题
您可以使用Array.prototype.some()以下方法轻松完成。
const isStringArray = (test: any[]): boolean => {
return Array.isArray(test) && !test.some((value) => typeof value !== 'string')
}
const myArray = ["A", "B", "C"]
console.log(isStringArray(myArray)) // will be log true if string array
Run Code Online (Sandbox Code Playgroud)
我相信这种方法比其他方法更好。这就是我发布这个答案的原因。
塞巴斯蒂安·维特索 (Sebastian Vittersø) 评论的更新
在这里你也可以使用Array.prototype.every()。
const isStringArray = (test: any[]): boolean => {
return Array.isArray(test) && test.every((value) => typeof value === 'string')
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
104268 次 |
| 最近记录: |