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
자바 스크립트로 아주 쉽게 같은 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 && value.length > 0){
console.log('string[]!');
}
}
또 다른 옵션은 Array.isArray ()입니다.
if(! Array.isArray(classNames) ){
classNames = [classNames]
}
지금까지 가장 간결한 솔루션은 다음과 같습니다.
function isArrayOfStrings(value: any): boolean {
return Array.isArray(value) && value.every(item => typeof item === "string");
}
참고 value.every
반환 true
빈 배열. false
빈 배열 을 반환해야하는 경우 value.length
조건 절에 추가해야합니다 .
function isNonEmptyArrayOfStrings(value: any): boolean {
return Array.isArray(value) && value.length && value.every(item => typeof item === "string");
}
TypeScript에는 런타임 유형 정보가 없으므로 (없을 것입니다. TypeScript Design Goals> Non goals , 5 참조), 빈 배열의 유형을 가져올 방법이 없습니다. 비어 있지 않은 배열의 경우 항목 유형을 하나씩 확인하는 것뿐입니다.
나는 이것이 답을 얻었음을 알고 있지만 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
}
}
There is an issue with an empty array being typed as string[]
, but that might be okay
Try this:
if (value instanceof Array) {
alert('value is Array!');
} else {
alert('Not an array');
}
there is a little problem here because the
if (typeof item !== 'string') {
return false
}
will not stop the foreach. So the function will return true even if the array does contain none string values.
This seems to wok for me:
function isStringArray(value: any): value is number[] {
if (Object.prototype.toString.call(value) === '[object Array]') {
if (value.length < 1) {
return false;
} else {
return value.every((d: any) => typeof d === 'string');
}
}
return false;
}
Greetings, Hans
참고URL : https://stackoverflow.com/questions/23130292/test-for-array-of-string-type-in-typescript
'Programing' 카테고리의 다른 글
내 SDK 버전을 다운 그레이드하는 방법은 무엇입니까? (0) | 2020.11.26 |
---|---|
JavaScript 객체의 값을 합하는 방법은 무엇입니까? (0) | 2020.11.26 |
Android Studio DexIndexOverflowException : 메서드 ID가 (0) | 2020.11.26 |
치명적 오류 : 정의되지 않은 함수 curl_init () 호출… (0) | 2020.11.26 |
Haskell에서 ()는 정확히 무엇입니까? (0) | 2020.11.26 |