2016-10-07 27 views
6

Tôi đã xem từ khóa Type ở nhiều nơi trong tài liệu. Ví dụ: as seen hereComponentRef có thuộc tính componentType. Nó được cho là loại Type<any>. Khi tìm kiếm thêm, tôi tìm thấy this entry về nó trên tài liệu. Nó nói: Gọi là trang trí ES7.Loại góc 2 là gì?

Cũng trong ngày tìm up the source trên github, tôi tìm thấy những nhận xét:

/** 
* @whatItDoes Represents a type that a Component or other object is instances of. 
* 
* @description 
* 
* An example of a `Type` is `MyCustomComponent` class, which in JavaScript is be represented by 
* the `MyCustomComponent` constructor function. 

Tuy nhiên tôi vẫn không rõ ràng như những gì Type làm. Tôi có thiếu cái gì cơ bản không ??

+1

Dường như khi các tài liệu được tạo ra, một số điều đã trộn xung quanh. "Decorator Invoke as ES7" rõ ràng đến từ [TypeDecorator] (https://github.com/angular/angular/blob/2.0.1/modules/%40angular/core/src/util/decorators.ts#L66) giao diện. Nó có ý nghĩa rằng nó đã được gây ra bởi điều đó, các tài liệu được liên kết với một chức năng chung của loại 'loại ' trả về một 'T', mà nó đáp ứng. –

Trả lời

8

Đánh giá theo định nghĩa:

export const Type = Function; 

export interface Type<T> extends Function { 
    new (...args: any[]): T; 
} 

Type chỉ là một chức năng. Type<T> chỉ là một số chức năng/kiểu khi được xây dựng (sử dụng bất kỳ kết hợp các đối số nào), tạo ra một T. Nói cách khác, định nghĩa "loại". Hãy nhớ rằng, "các loại" trong javascript (theo nghĩa OO) được biểu diễn bằng cách sử dụng các hàm. Và điều đó tương đương với các lớp, các giao diện và tương tự trong bản ghi.

Cho rằng, sau đây nên giữ:

class Foo { 
    s: string; 
} 
class Bar { 
    s: number; 
} 
class Biz { 
    ss: string; 
} 
class Baz { 
    s: string; 
    t: number; 
} 

let x: Type<{ s: string }>; // x is a type that returns an object 
          // with an s property of type string 

x = Foo; // ok 
x = Bar; // error, s is not a string 
x = Biz; // error, doesn't contain s property 
x = Baz; // ok 
x = { s: "foo" }; // haha nice try