2016-10-07 30 views
6

Belgede birçok yerde Type anahtar sözcüğü ile karşılaştım. Örneğin as seen hereComponentRef, componentType özelliğine sahiptir. Type<any> tipinde olduğu söylenir. Daha fazla aramada, dokümanlar hakkında this entry buluyorum. Diyor ki: ES7 dekoratör olarak çağırın.Köşeli Tip 2 nedir?

Ayrıca github üzerinde up the source görünümlü, ben bu yorumları bulabilirsiniz:

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

Ancak Type yaptığı iş olarak hala net değilim. Temel bir şey eksik miyim ??

+1

. "ES7 dekoratör olarak çağırır" görünüşte [TypeDecorator] 'dan geldi (https://github.com/angular/angular/blob/2.0.1/modules/%40angular/core/src/util/decorators.ts#L66) arayüz. Bunun neden olduğu kulağa mantıklı geliyor, dokümanlar, 'T' türünü karşılayan ve 'T' türünü karşılayan tipte bir genel işlev ile ilişkilendirilmiş. –

cevap

8

tanımı bakılırsa:

export const Type = Function; 

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

Type bir fonksiyonudur. Type<T>, oluşturulduğunda (argümanların herhangi bir birleşimini kullanarak) yalnızca bir işlev/türdür, bir T oluşturur. Yani bir başka deyişle, bir "tip" tanımı. Unutmayın, javascript'te "türler" (OO anlamında) işlevler kullanılarak temsil edilir. Ve bu, yazılara, arabirimlere ve benzerlerine eşittir. Aşağıdaki tutması anlamına Verilen

:

belgeler üretildi zaman, bazı şeylerin etrafında karıştırdı gibi görünüyor
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