2016-10-07 11 views
6

Napotkałem słowo kluczowe Type w wielu miejscach dokumentacji. Na przykład as seen hereComponentRef ma właściwość componentType. Mówi się, że jest typu Type<any>. Po dalszych poszukiwaniach znajduję o tym w dokumentach this entry. Jest napisane: Wywołaj jako dekorator ES7.Co to jest Typ w kancie 2?

także na spojrzenie up the source na github, uważam te komentarze:

/** 
* @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. 

Jednak ja nadal nie jestem jasne, co Type robi. Czy brakuje mi czegoś podstawowego?

+1

Wygląda na to, kiedy zostały wygenerowane docs, niektóre rzeczy pomyliłem się. "Dekorator Invoke jako ES7" najwyraźniej pochodzi z [TypeDecorator] (https://github.com/angular/angular/blob/2.0.1/modules/%40angular/core/src/util/decorators.ts#L66) berło. To ma sens, że było to spowodowane tym, że dokumenty były związane z ogólną funkcją typu 'Type ', która zwraca 'T', które spełnia. –

Odpowiedz

8

Sądząc po definicji:

export const Type = Function; 

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

Type jest tylko funkcja. Type<T> to tylko niektóre funkcje/typy po skonstruowaniu (przy użyciu dowolnej kombinacji argumentów), tworzy T. Innymi słowy, definicja "typu". Pamiętaj, że "typy" w javascript (w sensie OO) są reprezentowane za pomocą funkcji. A to odpowiada klasom, interfejsom i tym podobnym w maszynopisie.

Biorąc pod uwagę, co następuje powinien posiadać:

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