Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

182
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda