Làm cách nào để lấy một kiểu biến trong Typecript?


110

Tôi có một biến.

abc:number|string;

Làm thế nào tôi có thể kiểm tra loại của nó? Tôi muốn làm một cái gì đó như dưới đây:

if (abc.type === "number") {
    // do something
}

Câu trả lời:


167

Đối với:

abc:number|string;

Sử dụng toán tử JavaScripttypeof :

if (typeof abc === "number") {
    // do something
}

typeofTypeScript hiểu 🌹

Đây được gọi là bộ gõ.

Hơn

Đối với các lớp học bạn sẽ sử dụng instanceofví dụ:

class Foo {}
class Bar {} 

// Later
if (fooOrBar instanceof Foo){
  // TypeScript now knows that `fooOrBar` is `Foo`
}

Ngoài ra còn có các loại bảo vệ khác, ví dụ: invv https://basarat.gitbooks.io/typescript/content/docs/types/typeGuard.html


6
Đã thêm ghi chú vào instanceofmặc dù đó không phải là câu hỏi được hỏi.
basarat

42

Tôi muốn thêm rằng TypeGuards chỉ hoạt động trên chuỗi hoặc số, nếu bạn muốn so sánh một đối tượng, hãy sử dụng instanceof

if(task.id instanceof UUID) {
  //foo
}

5
Thật. Cần lưu ý rằng bạn có thể làm điều này với các classes nhưng không phải với TypeScript interfaces hoặc types, vì chúng không tồn tại trong tệp JavaScript được xuất.
joeytwiddle

10

Tôi đã kiểm tra một biến xem nó có phải là boolean hay không như bên dưới

console.log(isBoolean(this.myVariable));

Tương tự, chúng tôi có

isNumber(this.myVariable);
isString(this.myvariable);

và như thế.


1
làm việc cho tôi, nhưng chỉ để biết các loại !!, các loại tùy chỉnh phải sử dụnginstanceof
Carlos.V

3
Bạn sẽ cần nhập utilđể truy cập các chức năng này (ví dụ:import { isString } from 'util';
2Toad

Bây giờ cạn kiệt, hãy sử dụng if (typeof value === 'string') để thay thế
Monir Khan

6

Các câu trả lời khác là đúng, nhưng khi xử lý các giao diện, bạn không thể sử dụng typeof hoặc instanceof vì các giao diện không được biên dịch sang javascript.

Thay vào đó, bạn có thể sử dụng trình đánh chữ kiểm tra chức năng + typecast để kiểm tra biến của bạn:

interface Car {
    drive(): void;
    honkTheHorn(): void;
}

interface Bike {
    drive(): void;
    ringTheBell(): void;
}

function start(vehicle: Bike | Car ) {
    vehicle.drive();

    // typecast and check if the function exists
    if ((<Bike>vehicle).ringTheBell) {
        const bike = (<Bike>vehicle);
        bike.ringTheBell();
    } else {
        const car = (<Car>vehicle);
        car.honkTheHorn();
    }
}

Và đây là JavaScript được biên dịch trong ES2017:

function start(vehicle) {
    vehicle.drive();
    if (vehicle.ringTheBell) {
        const bike = vehicle;
        bike.ringTheBell();
    }
    else {
        const car = vehicle;
        car.honkTheHorn();
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.