2015-08-16 2 views
4

В lib.d.ts мы можем найти следующий фрагмент кода:Что такое прототип в Typcript?

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

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

declare var Error: ErrorConstructor; 

Какое значение prototype собственности на ErrorConstructor?

ответ

2

Нет особого значения свойства prototype в TypeScript за пределами обычного особого значения свойства JavaScript-конструкторов prototype.

В этом коде prototype свойство ErrorConstructor типа/интерфейс установлен для того, чтобы любой код, который получает доступ к ErrorConstructor.prototype непосредственно получит правильную информацию набора текста для этого свойства.

Напротив, подпись newErrorConstructor определяет тип объекта, созданного с помощью вызова new. Возвращаемое значение new конструктора и конструктор конструктора prototype номинально одного и того же типа, но JavaScript позволяет конструкторам возвращать значения, которые не относятся к их собственному типу, поэтому разграничение необходимо для правильного ввода всего возможного кода JavaScript.

+0

Возможно, я ошибаюсь, но мне кажется, что интерфейс 'ErrorConstructor' на самом деле не предназначен для использования/ссылки. Кажется, что он существует только для того, чтобы мы могли «печатать» информацию типа вокруг внешнего объекта Error. В этом свете, какие возможные практические причины были бы связаны с «ErrorConstructor.proptotype»? –

+1

Хорошая точка. Я думаю, кроме того, что точно реплицируется то, что определено в стандарте ECMAScript ('lib.d.ts' автоматически генерируется в конце концов), наличие хорошо продуманного« прототипа »может помочь расшифровать код класса« Ошибка »вручную. –

Смежные вопросы