2014-04-17 14 views
25

Làm cách nào để kiểm tra xem biến có phải là mảng chuỗi trong TypeScript không? Một cái gì đó như thế này:Kiểm tra mảng kiểu chuỗi trong 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 đây: http://typescript.io/k0ZiJzso0Qg/2

Edit: Tôi đã cập nhật các văn bản yêu cầu cho một thử nghiệm cho string []. Điều này chỉ có trong ví dụ mã trước đây.

+0

thể trùng lặp của [? Làm thế nào để bạn kiểm tra xem một biến là một mảng trong JavaScript] (http://stackoverflow.com/question/767486/how-do-you-check-if-a-biến-là-một-mảng-trong-javascript) – WiredPrairie

+0

Khi TypeScript chỉ biên dịch sang JavaScript, các câu trả lời có thể được tìm thấy bằng cách tìm kiếm một giải pháp JavaScript. Hơn nữa, nó là giá trị nó để xem một số câu trả lời như câu trả lời phụ thuộc vào máy chủ và làm thế nào nó đang được sử dụng và thông qua. – WiredPrairie

Trả lời

53

Bạn không thể kiểm tra cho string[] trong trường hợp chung nhưng bạn có thể kiểm tra cho Array khá dễ dàng giống như trong JavaScript https://stackoverflow.com/a/767492/390330

Nếu bạn đặc biệt muốn cho string mảng bạn có thể làm điều gì đó như:

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

Cảm ơn - đó là những gì tôi cần! –

1

Hãy thử điều này:

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

Thay vì sao chép một câu trả lời khác, vui lòng chỉ ra bản sao làm nhận xét, đặc biệt là vì điều này không hoạt động trong mọi trường hợp. – WiredPrairie

14

Một tùy chọn khác là Array.isArray()

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

Tôi biết điều này đã được trả lời, nhưng nguyên cảo giới thiệu bảo vệ loại: https://www.typescriptlang.org/docs/handbook/advanced-types.html#typeof-type-guards

Nếu bạn có một loại như: Object[] | string[] và những gì để làm điều gì đó có điều kiện dựa trên những gì loại nó là - bạn có thể sử dụng này loại canh gác:

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 
    } 
} 

có một vấn đề với một mảng trống được gõ như string[], nhưng điều đó có thể là okay

0

có một vấn đề nhỏ ở đây bởi vì

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

sẽ không dừng việc tìm kiếm. Vì vậy, hàm sẽ trả về true ngay cả khi mảng không chứa giá trị chuỗi nào.

Điều này dường như chảo cho tôi:

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

Các vấn đề liên quan