2015-08-16 100 views
4

lib.d.ts我们可以发现下面的代码:什么是Typescript原型?

interface Error { 
    name: string; 
    message: string; 
} 

interface ErrorConstructor { 
    new (message?: string): Error; 
    (message?: string): Error; 
    prototype: Error; 
} 

declare var Error: ErrorConstructor; 

什么是ErrorConstructorprototype属性的意义是什么?

回答

2

除了JavaScript构造函数的prototype属性的正常特殊意义之外,TypeScript中的prototype属性没有特别的意义。

在此代码中,ErrorConstructor类型/接口的prototype属性被设置为确保直接访问ErrorConstructor.prototype的任何代码都将获得该属性的正确类型信息。

相反,ErrorConstructornew签名定义了使用new调用创建的对象的类型。构造函数的new返回值和构造函数的prototype名义上是相同的类型,但JavaScript允许构造函数返回不属于它们自己类型的值,因此区分是正确键入所有可能的JavaScript代码所必需的。

+0

我可能是错的,但在我看来,'ErrorConstructor'接口并不是真正意义上的使用/引用。它似乎只是为了让我们可以围绕外部错误对象“脚手架”类型信息。有鉴于此,访问'ErrorConstructor.proptotype'的可能的实际原因是什么? –

+1

好点。除了完全复制ECMAScript标准中定义的内容外('lib.d.ts'毕竟是自动生成的),具有'prototype'的类型可以帮助'Error'类的手动扩展。 –