class Thing extends ((function () {
return null;
})()) {
doThing() {
}
}
Это действительно окольный способ сказать extends null
, но типы не проверяются, что неудобно. Вы должны аннотировать IIFE фиктивным типом ctor, например StringConstructor
чтобы удовлетворить проверку.
Это сделано намеренно. единственная поддерживаемая форма расширения null - это extends null
что-либо еще, должно возвращать значение, тип которого имеет подпись конструкции. Мы исключили любой из них как подстановочный знак в этом сценарии только потому, что это более вероятная ошибка пользователя, чем предполагалось. Было бы интересно посмотреть, есть ли реальные варианты использования, где это может понадобиться.
Вот интересный случай, в TypeScript 2.0 я объявляю модуль swagger-client, например: declare module 'swagger-client';
. Однако, когда я пытаюсь использовать это как:
import * as Swagger from 'swagger-client';
class Swagger extends Swagger {
pet: any;
constructor() {
super({
url: config.get('spec.petstore'),
usePromise: true
});
}
}
Я получаю сообщение об ошибке Type 'any' is not a constructor function type
.
Я получил эту ошибку, когда импортировал из индексного файла вот так:
import {Derived, Base} из '.'
а производный класс был указан в index.ts перед базовым классом:
экспорт {Derived} из './Derived';
экспорт {Base} из './Base';
Я поменял порядок, и это сработало.
Самый полезный комментарий
Вот интересный случай, в TypeScript 2.0 я объявляю модуль swagger-client, например:
declare module 'swagger-client';
. Однако, когда я пытаюсь использовать это как:Я получаю сообщение об ошибке
Type 'any' is not a constructor function type
.