什么是角度2的类型?

时间:2016-10-07 03:44:19

标签: angular typescript

我在文档中的许多地方都遇到了Type关键字。例如,as seen here ComponentRef具有componentType属性。它被称为类型Type<any>。在进一步搜索时,我会在文档中找到关于它的this entry。它说:作为ES7装饰器调用

同样在github上查看up the source,我发现这些评论:

/**
 * @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 个答案:

答案 0 :(得分:11)

根据定义判断:

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