2012-10-03 27 views
13

Tôi đang sử dụng Personas dựa trên số proprietary property navigator.id. Kể từ khi khách sạn này là không đạt tiêu chuẩn, trình biên dịch nguyên cảo tạo ra các cảnh báo sau đây:Cách xử lý cảnh báo cho thuộc tính sở hữu/tùy chỉnh của các đối tượng tích hợp trong TypeScript

$ tsc home.ts --out my_ts_generated_code.js 
/Users/..../home.ts(27,18): The property 'id' does not exist on value of type 'Navigator' 

Nhưng những tập tin .js được tạo thành công và chạy trên trình duyệt FF15 mà không cần bất kỳ thông điệp cảnh báo/lỗi.
Tôi cũng bao gồm một polyfill cho navigator.id, theo hướng dẫn của tài liệu, vì vậy navigator.id chắc chắn sẽ có sẵn trong mọi trình duyệt.

Ai đó có thể đề xuất tôi cách xử lý cảnh báo này?

index.html

<!-- some HTML omit above --> 
<script src="https://login.persona.org/include.js"></script> 
<script src="my_ts_generated_code.js"></script> 
<button class="btn" id="signin">Sign in</button> 
<button class="btn" id="signout">Sign out</button> 
<!-- some HTML omit below --> 

home.ts

declare var $; 

class Student { 
    fullname : string; 
    constructor(public firstname, public middleinitial, public lastname) { 
     this.fullname = firstname + " " + middleinitial + " " + lastname; 
    } 
} 

interface Person { 
    firstname: string; 
    lastname: string; 
} 

function greeter(person : Person) { 
    return "Hello, " + person.firstname + " " + person.lastname; 
} 

var user = new Student("Jane", "M.", "User"); 

$(function() { 
    $('#signin').on('click', function(e) { 
     e.preventDefault(); 
     navigator.id.request(); 
    }); 

    $('#signout').on('click', function(e) { 
     e.preventDefault(); 
     navigator.id.logout(); 
    }); 
    //document.body.innerHTML = greeter(user); 
}); 
+1

'navigator' là gì? Nó từ đâu tới? Nó được tuyên bố như thế nào? –

+0

@Sidharth: https://developer.mozilla.org/en-US/docs/DOM/window.navigator –

+1

Có thể có liên quan: https://developer.mozilla.org/en-US/docs/DOM/navigator.id ... đó là một tài sản phi tiêu chuẩn. –

Trả lời

18

1) Bạn có thể diễn giải lại navigator prop.

(<any>navigator).id.request(); 

2) Bạn có thể khai báo id chống đỡ khỏang

mycompany.lib.d.ts

interface Navigator { 
    id: any 
} 

app.ts

navigator.id.request(); 

xem video này http://channel9.msdn.com/posts/Anders-Hejlsberg-Introducing-TypeScript/ Có Anders nói với jQuery.UI thêm các phương thức mới vào jQuery (xem 46 phút)

+0

Tôi đã đi với Tùy chọn 2 vì nó có vẻ giống như "Kiểu chữ" và giúp giảm thiểu nợ kỹ thuật. – rinogo

0

Thêm kiểm tra như if(navigator.id != null && typeof navigator.id != 'undefined') trước stmt nơi navigator.id được gọi

+1

Điều này sẽ bảo vệ chống lại id không xác định tại thời gian chạy, nhưng trình biên dịch sẽ vẫn phàn nàn rằng nó phá vỡ giao diện. @ Jack128 của câu trả lời là tốt - thêm định nghĩa giao diện. Vẫn tốt hơn, viết tiêu đề khai báo cho giao diện thực tế thay vì chỉ nói 'navigator.id: any'. –

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