Tìm kiếm trang web

typescript - Biến Date hoạt động, nhưng các hàm trên nó thì không


Tôi đang sử dụng TypeScript 1.4 trong một dự án ASP.NET MVC 5.

Tôi có một trường kiểu Ngày, và nó hoạt động một phần:

var dob: Date = result.dateOfBirth;
alert(dob);
var dobAsString = dob.toDateString();

Trong đoạn mã ở trên, hai dòng đầu tiên hoạt động, hiển thị giá trị là "1968-11-16T00:00:00", như mong đợi. Nhưng dòng cuối cùng không hoạt động, thực tế phần còn lại của mã dưới dòng đó thậm chí không được thực thi -- nó chỉ bị hỏng, mà không có thông báo lỗi.

Hành vi này vẫn tiếp diễn bất kể tôi sử dụng hàm Date nào trong dòng cuối cùng; tôi cũng có thể dùng dob.getFullYear() v.v. và nó sẽ thất bại mỗi lần. Tuy nhiên, biến có đúng kiểu và giá trị đúng. Trình biên dịch cũng nhận các hàm Date, nó biên dịch mà không gặp trở ngại nhưng khi chạy thì thất bại. Có ai có ý tưởng không?

Câu trả lời #1

Có hai khía cạnh liên quan đến vấn đề này. Thứ nhất là bạn cần phân tích ngày, vì hiện tại bạn có một biểu diễn chuỗi. Thứ hai là biến result của bạn không có thông tin kiểu dữ liệu.

var result = {
    dateOfBirth: '1968-11-16T00:00:00'
};

// Error, cannot convert string to date
var a: Date = result.dateOfBirth;

// Okay
var b: Date = new Date(result.dateOfBirth);

var result2: any = result;

// Okay (not type information for result2)
var c: Date = result2.dateOfBirth;

Khi bạn nhận lại một thông điệp JSON, bạn có thể áp dụng một giao diện cho nó để mô tả những gì máy chủ đã gửi, nhằm phát hiện các vấn đề trong mã TypeScript của bạn - chẳng hạn như vấn đề bạn đã tìm thấy. Điều này sẽ ngăn vấn đề xảy ra lần nữa trong tương lai (mặc dù không kiểm tra xem JSON được cung cấp có khớp với giao diện hay không)... ví dụ dưới đây giả sử result hiện có kiểu any.

interface NameYourResult {
    dateOfBirth: string;
}

var r: NameYourResult = result;

Bài viết liên quan