2017-12-27 143 views
17

Trong khi làm việc với các "Tour of Heroes" hướng dẫn trên trang web kiễu góc tôi thấy cú pháp sau (trong thời gian ngắn):nguyên cảo, sử dụng các lớp học mà không constructor

class Hero { 
    id: number, 
    name: string, 
} 

const aHero: Hero = { 
    id: 1, 
    name: 'Superman' 
} 

console.log(aHero instanceof Hero); //false 

Điều gì sẽ là điểm trong việc này? khi tôi kiểm tra loại "aHero", nó chỉ là một đối tượng chung và không phải là loại "Hero". Nó có thể tốt hơn khi khởi tạo một đối tượng với một hàm tạo không ?:

class Hero { 
    constructor(id: number, name: string) {} 
} 
+13

Câu hỏi hay. Câu trả lời là hướng dẫn thúc đẩy một thực hành xấu. 'Hero' phải là một' giao diện'. –

+2

Phương châm Todd có một [bài viết tuyệt vời] (https://toddmotto.com/classes-vs-interfaces-in-typescript) giải thích sự khác biệt và khi nào/tại sao sử dụng 'giao diện' so với' lớp' – mhodges

+0

bạn có thể thêm tham chiếu hay không vào phần với mã này? –

Trả lời

2

Bạn có thể sử dụng lớp làm kiểu bạn đang sử dụng. Vì vậy, cho dù Hero là một giao diện hay lớp nó không quan trọng bởi vì bạn đang sử dụng nó như một loại.

class Hero { id: number; name: string } 

hoặc

interface Hero { id: number; name: string } 

Sau đây không lo lắng cho dù Hero là một lớp hoặc giao diện

let hero: Hero = { id: 1, name: 'me' } 

đâu interfaceclass Phân biệt là interface chỉ là dành cho bạn, nó không phải không không nhận được transpile vào javascript. A class và bạn không thể new một interface.

Constructor hoặc No Constructor, nếu bạn new thì đó là instanceof. Thử lại lần nữa với

let hero = new Hero(); 

instanceof log của bạn này sẽ là true vì bạn đã tạo ra một thể hiện của Hero với các từ khóa new.

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