Typescript: Le type 'any' n'est pas un type de fonction constructeur

Créé le 1 sept. 2015  ·  3Commentaires  ·  Source: microsoft/TypeScript

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

C'est une façon vraiment détournée de dire extends null , mais les types ne vérifient pas, ce qui est gênant. Vous devez annoter l'IIFE avec un type de facteur fictif comme StringConstructor pour satisfaire le vérificateur.

By Design

Commentaire le plus utile

Voici un cas intéressant, dans TypeScript 2.0 je déclare un module swagger-client comme : declare module 'swagger-client'; . Cependant, lorsque j'essaie de l'utiliser comme :

import * as Swagger from 'swagger-client';

class Swagger extends Swagger {
  pet: any;
  constructor() {
    super({ 
      url: config.get('spec.petstore'),
      usePromise: true
    });
  }
}

J'obtiens l'erreur Type 'any' is not a constructor function type .

Tous les 3 commentaires

C'est par conception. la seule forme prise en charge d'étendre null est extends null toute autre chose, doit retourner une valeur dont le type a une signature de construction. Nous en avons exclu en tant que caractère générique dans ce scénario, simplement parce qu'il s'agit plus probablement d'une erreur de l'utilisateur que prévu. il serait intéressant de voir s'il existe des cas d'utilisation réels où cela serait nécessaire.

Voici un cas intéressant, dans TypeScript 2.0 je déclare un module swagger-client comme : declare module 'swagger-client'; . Cependant, lorsque j'essaie de l'utiliser comme :

import * as Swagger from 'swagger-client';

class Swagger extends Swagger {
  pet: any;
  constructor() {
    super({ 
      url: config.get('spec.petstore'),
      usePromise: true
    });
  }
}

J'obtiens l'erreur Type 'any' is not a constructor function type .

J'ai eu cette erreur lorsque j'ai importé à partir du fichier d'index comme suit :

importer {Dérivé, Base} de '.'

et la classe dérivée était répertoriée dans index.ts avant la classe de base :

exporter {Dérivé} de './Dérivé' ;
exporter {Base} depuis './Base' ;

J'ai changé la commande et cela a fonctionné.

Cette page vous a été utile?
0 / 5 - 0 notes