在TypeScript中测试字符串类型的数组
如何测试变量是否是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"
}
};
TypeScript.io在这里:http://typescript.io/k0ZiJzso0Qg/2
编辑:我已经更新了文字,要求对字符串[]进行测试。 这只是以前的代码示例。
你不能在一般情况下测试string[]
,但是你可以很容易地测试Array
,就像在JavaScript中一样https://stackoverflow.com/a/767492/390330
如果你特别想要string
数组,你可以这样做:
if (value instanceof Array) {
var somethingIsNotString = false;
value.forEach(function(item){
if(typeof item !== 'string'){
somethingIsNotString = true;
}
})
if(!somethingIsNotString){
console.log('string[]!');
}
}
另一个选项是Array.isArray()
if(! Array.isArray(classNames) ){
classNames = [classNames]
}
我知道这已被回答,但TypeScript引入了类型警卫:https://www.typescriptlang.org/docs/handbook/advanced-types.html#typeof-type-guards
如果你有一个类型: Object[] | string[]
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
}
}
有一个空数组被键入为string[]
,但可能没问题