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

188
Views
TypeScript define valores predefinidos para la clase de modelo

Digamos que tengo una clase de usuario y necesito instanciar solo un 'estado' predefinido. ¿Es esta la mejor manera de hacerlo? ¿Hay otra alternativa? ¿Cuál es la forma correcta de hacerlo? Gracias por adelantado.

 export class User { constructor( username: string, email: string, status: AccountStatus ){} } export enum AcountStatus { Active = 'Active', Suspended = 'Suspended' }

 import { User } from 'app/models/user.model' import { AccountStatus } from 'app/models/user.model' private user: User; this.user = new User('username', 'user@user.cm', AccountStatus.Active)

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Si la mayoría de los usuarios tendrán un estado Active predeterminado, también puede dar un valor predeterminado al status en el constructor:

 class User { constructor( public username: string, public email: string, public status: AccountStatus = AccountStatus.Active ){} }

Luego, cuando inicializa un usuario Activo, no necesita pasar explícitamente el estado Active cada vez:

 let user: User; user = new User('username', 'user@user.cm')

patio de recreo


Otra posible mejora es que puede reemplazar la enumeración AccountStatus con un tipo de unión:

 class User { constructor( public username: string, public email: string, public status: 'Active' | 'Suspended' = 'Active' ){} } let user = new User('username', 'user@user.cm')
about 4 years ago · Juan Pablo Isaza Report

0

Si desea darle más flexibilidad al consumidor de su código, puede aceptar una unión de literales de cadena O un miembro de su enumeración de cadena:

Parque infantil TS

 type Values<T> = T[keyof T]; type StringEnumToUnion<T extends Record<string, string>> = `${Values<T>}`; function valueIsStringEnum <Enum extends Record<string, string>>( value: unknown, o: Enum, ): value is Values<Enum> { return Object.values(o).includes(value as string); } function assert (expr: unknown, msg?: string): asserts expr { if (!expr) throw new Error(msg); } export enum AccountStatus { Active = 'Active', Suspended = 'Suspended', } export class User { constructor ( username: string, email: string, status: StringEnumToUnion<typeof AccountStatus>, ) { let ac: AccountStatus; ac = status; /* ~~ Type '"Active" | "Suspended"' is not assignable to type 'AccountStatus'. Type '"Active"' is not assignable to type 'AccountStatus'.(2322) */ // Assert it back to AccountStatus for your own usage if you want: assert(valueIsStringEnum(status, AccountStatus)); ac = status; // ok } } // Example usage: new User('user', 'user@name.tld', 'ACTUVE'); /* ~~~~~~~~ Argument of type '"ACTUVE"' is not assignable to parameter of type '"Active" | "Suspended"'.(2345) */ new User('user', 'user@name.tld', 'Active'); // ok new User('user', 'user@name.tld', AccountStatus.Active); // ok
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!