Búsqueda de sitios web

typescript - "El objetivo de la llamada no contiene ninguna firma" al llamar a super() sin archivo de tipados


Estoy tratando de hacer que Polymer 2.0 funcione con TypeScript y me estoy encontrando con problemas al crear un constructor donde las bibliotecas, incluido Polymer 2, no exponen un archivo de tipos adecuado. En el caso más sencillo:

class MyView1 extends Polymer.Element {
    public static is = 'my-view1';

    constructor() {
        super(); // [ts] Call target does not contain any signature
    }
}

Para hacer que compile en absoluto sin el constructor, he hecho un declare var Polymer: any; en un archivo principal .d.ts.

Ahora, tengo dos preguntas:

  1. ¿Cómo (si es que es posible) puedo hacer que TypeScript ignore esto y simplemente asuma que hay un super constructor que puede llamar?
  2. ¿Cómo (si es que acaso) declaro un archivo de tipos que contenga una firma para la superclase? No he podido encontrar la documentación adecuada para esto (y los diversos casos de uso con los que me he encontrado hasta ahora) todavía.

Respuesta #1

Simplemente puedes ampliar tu declaración para incluir un constructor en la propiedad Element:

declare var Polymer: {
    Element: {
        new ();
    }
};

Para tu segunda pregunta, puedes simplemente mover esto a un archivo *.d.ts. Consulta la documentación sobre cómo crear archivos de declaración.

Respuesta #2

¿Por qué?

Usualmente, esto se debe a que hay lógica condicional que altera cuál puede ser la superclase. Por ejemplo --

class A {
    constructor() {
        super(/* anything */);
    }
}
class B {
    constructor() {
        super(/* anything */);
    }
}

var X = { prod: A, qa: A, dev: B, mock: B }[ environment.type ];  // inline map

class C extends X {
    constructor() {
        super(/* anything */);
    }
}

-- puede generar este comportamiento si type ni siquiera está declarado en environment, o [potencialmente] si TypeScript especialmente piensa que X podría ser algo distinto de una clase que acepta los argumentos proporcionados por la subclase.

Artículos relacionados