Búsqueda de sitios web

Typescript: this.property dentro de una función da error de tipo implícitamente any. No se puede llamar a new Object();


Estoy tratando de integrar TypeScript en mi camino de aprendizaje y entender las diferencias con JavaScript.

Hasta ahora pude resolver todos los problemas, pero me quedé atrapado en algo que parece bastante básico.

function Person() {
    // ERROR: this implicitly has type any because it does not have a type annotation
    this.name = 'brad';
}

// ERROR: new expression, whose target lacks a construct signature, implicitly has an any type
const brad = new Person();

console.log( brad );

He probado algunas posibles soluciones:

  • deshabilitado sin this implícito en tsconfig:

    esto funcionaría para eliminar el primer error, pero el que está en new Person() permanece

  • establecer esto: cualquier en los paréntesis del parámetro (con noimplicitthis en verdadero)

    function Person( this: any ) { // ERROR: unexpected any. specify a different type
    
  • intenté usar una función flecha para guardarlo
  • intentó usar el constructor dentro de la función Person

Eché un vistazo al manual oficial de TypeScript, pero simplemente no parece que encuentre nada que se relacione con mi problema actual.

¿Por qué el código anterior funciona en JS mientras que en TypeScript no parece funcionar?

Respuesta #1

Typescript se está quejando aquí de que no sabe en la declaración cuál es el tipo de this y qué debería devolver

Podemos resolver esto de 2 maneras -

Solución 1: (Preferida)

// Convert this constructor function to Person

class Person {
    name = 'brad'
}

const brad = new Person();

console.log( brad );

Solución 2: (Hacky)

interface Person1 {
    name: string
    // All properties of Person goes here
}

const  Person1 = function (this: Person1){
    this.name = 'brad'
} as any as { new (): Person1 }

const foo = new Person1();

console.log(foo);

Patio de código