Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

194
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!