Typescript: Тип 'any' не является типом функции-конструктора

Созданный на 1 сент. 2015  ·  3Комментарии  ·  Источник: microsoft/TypeScript

class Thing extends ((function () {
    return null;
})()) {
    doThing() {
    }
}

Это действительно окольный способ сказать extends null , но типы не проверяются, что неудобно. Вы должны аннотировать IIFE фиктивным типом ctor, например StringConstructor чтобы удовлетворить проверку.

By Design

Самый полезный комментарий

Вот интересный случай, в 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 .

Все 3 Комментарий

Это сделано намеренно. единственная поддерживаемая форма расширения 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';

Я поменял порядок, и это сработало.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги