Sobes.tech
Middle

Fale sobre os tipos utility em TypeScript.

sobes.tech IA

Resposta da IA

Os tipos utilitários em TypeScript são tipos auxiliares integrados que simplificam operações comuns com tipos, como transformações, extrações ou exclusões de propriedades específicas. Eles aumentam a flexibilidade e a legibilidade do código.

Principais tipos úteis:

  • Partial<Type>: Cria um tipo em que todas as propriedades de Type são opcionais.
    // Cria um tipo com as propriedades opcionais 'name' e 'age'
    type PartialUser = Partial<{ name: string; age: number }>;
    
  • Readonly<Type>: Cria um tipo em que todas as propriedades de Type estão marcadas como apenas leitura.
    // Cria um tipo com as propriedades 'name' e 'age', acessíveis apenas para leitura
    type ReadonlyUser = Readonly<{ name: string; age: number }>;
    
  • Pick<Type, Keys>: Cria um tipo selecionando um conjunto de propriedades Keys de Type. Keys pode ser um literal de string ou uma união de literais de string.
    // Cria um tipo que contém apenas a propriedade 'name'
    type UserWithName = Pick<{ name: string; age: number }, 'name'>;
    
  • Omit<Type, Keys>: Cria um tipo excluindo um conjunto de propriedades Keys de Type.
    // Cria um tipo que contém apenas a propriedade 'age'
    type UserWithoutName = Omit<{ name: string; age: number }, 'name'>;
    
  • Exclude<UnionType, ExcludedMembers>: Cria um tipo excluindo de UnionType todos os membros atribuíveis a ExcludedMembers.
    // Cria um tipo que exclui 'null' do união
    type NonNullableString = Exclude<string | null | undefined, null | undefined>;
    
  • Extract<Type, Union>: Extrai de Type todos os membros atribuíveis a Union.
    // Extrai 'null' e 'undefined' do união
    type JustNullOrUndefined = Extract<string | null | undefined, null | undefined>;
    
  • NonNull<Type>: Exclui null e undefined de Type.
    // Cria um tipo que exclui 'null' e 'undefined'
    type NonNullStringOrNumber = NonNullable<string | number | null | undefined>;
    
  • Parameters<Type>: Obtém os tipos de parâmetros da função Type em forma de tupla.
    // Obtém os tipos de parâmetros da função: [string, number]
    type FuncParams = Parameters<(a: string, b: number) => void>;
    
  • ReturnType<Type>: Obtém o tipo de valor de retorno da função Type.
    // Obtém o tipo de valor de retorno da função: number
    type FuncReturn = ReturnType<() => number>;
    
  • ConstructorParameters<Type>: Extrai os tipos de parâmetros do construtor do tipo construtor.
    // Obtém os tipos de parâmetros do construtor de classe: [string, number]
    type MyClassParams = ConstructorParameters<typeof MyClass>;
    
    class MyClass {
        constructor(name: string, age: number) {}
    }
    
  • InstanceType<Type>: Extrai o tipo de instância do tipo construtor.
    // Extrai o tipo de instância de classe: MyClass
    type MyClassInstance = InstanceType<typeof MyClass>;
    
    class MyClass {
        constructor(name: string, age: number) {}
    }
    

O uso de tipos utilitários contribui para criar um código mais seguro, flexível e fácil de manter.