Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

193
Vistas
La mejor manera de manejar valores de clase no inicializados en TypeScript: el objeto es posiblemente 'nulo'

Creé una clase contenedora para las operaciones de S3, pero cuando compilo con el compilador de TypeScript, aparece el siguiente error:

 lib/Store.ts:20:15 - error TS2531: Object is possibly 'null'. 20 await this.store.upload({

Soy nuevo en TypeScript, pero entiendo que TypeScript está haciendo su trabajo aquí y evita la posibilidad de que await this.store.upload() pueda ejecutarse mientras this.store es null . ¿Cuál es la forma correcta de lidiar con este tipo de situación en la que es posible que aún no se haya inicializado un valor de clase?

Mi clase contenedora:

 import S3 from 'aws-sdk/clients/s3'; export class Store { storeName: string; store: S3 | null; initialised: boolean; constructor(storeName: string) { this.storeName = storeName; this.store = null; this.initialised = false; } _init(): void { this.store = new S3(); } async _writeToStore(data: object, path: string): Promise<void> { if (!this.initialised) this._init(); await this.store.upload({ Bucket: this.storeName, Key: path, Body: data }).promise(); } }

Siempre he tratado de evitar crear nuevas instancias de clases en el constructor porque es difícil burlarse de ellas. ¿Quizás pasar una nueva instancia de clase al constructor es el mejor enfoque?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Puedes probar
{
...
"strictNullChecks": verdadero,
"strictPropertyInitialization": verdadero,
...
}

" strictNullChecks " le dice al compilador que busque cualquier variable declarada que se evalúe como nula o indefinida y se genere en caso de error en el momento del compilador ( https://www.typescriptlang.org/tsconfig#strictNullChecks ) " strictPropertyInitialization " le dice al compilador que genere un error ' cuando se declaró una propiedad de clase pero no se estableció en el constructor '. ( https://www.typescriptlang.org/tsconfig#strictPropertyInitialization )

about 4 years ago · Juan Pablo Isaza Denunciar

0

strictNullChecks le está dando ese error porque tiene habilitadas las comprobaciones estrictas y su store propiedades tiene un tipo null como posible.

Puedes hacer cualquiera de estas opciones

Opción 1: eliminar el tipo null

Probablemente pueda colocar el tipo null en la store , ya que está configurando el valor de esa propiedad en su constructor, y nada en su código lo establece en null :

 store: S3;

Opción 2: agregar un operador de aserción no nulo

Alternativamente, si this.store nunca va a ser nulo cuando ejecuta this.store.upload({...}) , entonces puede agregar un operador de aserción no nulo (!) como este:

 this.store!.upload({...})

Eso le dirá a Typescript que deje de dar el error. Tenga en cuenta que esto no cambia el comportamiento de tiempo de ejecución de su código, por lo que es importante usar solo ! cuando sabe que el valor no puede ser null o undefined .

Opción 3 - Comprobar en la store el valor null justo antes

Puede verificar explícitamente this.store para el valor nulo justo antes de llamar a this.store.upload() . Pero esta llamada debe hacerse dentro del mismo método, así:

 if (!this.store) { this.store = new S3(); } await this.store.upload({...});

Esto no funcionará:

 if (!this.store) { this._init(); } await this.store.upload({...});

Conclusión

Personalmente, optaría por la opción 1. Supongo que su razón para escribir un contenedor para S3 es que sus consumidores nunca tengan que crear una instancia y trabajar directamente con un objeto S3 y, en cambio, crear una instancia y trabajar con su clase/objeto contenedor.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda