2016-10-07 4 views
6

Я столкнулся с ключевыми словами Type во многих местах документации. Например, as seen hereComponentRef имеет имущество componentType. Говорят, что он имеет тип Type<any>. При дальнейшем поиске я нахожу this entry об этом на документах. В нем написано: Вызовите как декоратор ES7.Что такое тип углового 2?

Также на поиске up the source на GitHub, я нахожу эти комментарии:

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

Однако я до сих пор не ясно, как к тому, что Type делает. Я что-то пропустил?

+1

Похоже, когда были сгенерированы документы, некоторые вещи смешалось вокруг. «Invoke as ES7 decorator», по-видимому, пришел из [TypeDecorator] (https://github.com/angular/angular/blob/2.0.1/modules/%40angular/core/src/util/decorators.ts#L66) интерфейс. Как бы то ни было, это связано с тем, что документы были связаны с общей функцией типа 'Type ', которая возвращает 'T', который он удовлетворяет. –

ответ

8

Судя по определению:

export const Type = Function; 

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

Type это просто функция. Type<T> - это просто некоторая функция/тип при построении (с использованием любой комбинации аргументов), создает T. То есть, другими словами, определение типа. Помните, что «типы» в javascript (в смысле OO) представлены с использованием функций. И это приравнивается к классам, интерфейсам и тому подобному в машинописном тексте.

Учитывая, что следующие следует провести:

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 
Смежные вопросы