"Como Funcionam os Tipos any, never, unknown e void?"
Em lições anteriores, você aprendeu como trabalhar com tipos primitivos, tipos union e interfaces.
Mas o TypeScript tem alguns tipos especiais dos quais você deve estar ciente. Vamos começar olhando para o tipo
any.
O tipo any é usado para representar qualquer tipo de valor.
let randomValue: any;
randomValue = 42;
randomValue = "Hello";
randomValue = true;
randomValue = { name: "Alice" };
Com esse tipo, você precisa ter cuidado porque ele pode ser facilmente usado em excesso e mal utilizado. Você não quer digitar tudo com o tipo any apenas para silenciar as mensagens de erro do TypeScript. Isso anula o propósito de usar TypeScript e adicionar segurança de tipo desde o início.
Um equivalente mais seguro ao tipo any seria o tipo unknown. unknown é semelhante a any mas com o tipo unknown, você precisa fazer uma verificação de tipo na variável antes de usá-la.
Aqui está um exemplo:
function doubleValue(value: unknown) {
if (typeof value === "number") {
console.log(value * 2);
} else if (typeof value === "string") {
console.log(value + value);
}
}
doubleValue(10);
doubleValue("Hi ");
doubleValue(true);
Neste exemplo, as verificações de tipo garantem que as operações sejam realizadas apenas em valores do tipo correto. Valores que não correspondem aos tipos esperados são ignorados.
O próximo tipo que vamos analisar é o tipo never. Esse tipo representa algo que nunca acontecerá.
Na maioria das situações, você não estará escrevendo anotações de tipo usando never. Em vez disso, você provavelmente verá o tipo never aparecer em mensagens de erro como esta:
function processValue(value: string | number) {
if (typeof value === "string") {
console.log("String value:", value.toUpperCase());
} else if (typeof value === "number") {
console.log("Number value:", value * 2);
} else {
console.log(value);
}
}
Dentro da cláusula else do exemplo acima, o value tem um tipo never. Isso ocorre porque o ramo else agora é impossível de alcançar e não resta nenhum tipo. Se você tentasse fazer uma chamada da função com um valor diferente de string ou number, ele mostraria um erro como este:
function processValue(value: string | number) {
if (typeof value === "string") {
console.log("String value:", value.toUpperCase());
} else if (typeof value === "number") {
console.log("Number value:", value * 2);
} else {
console.log(value);
}
}
// Argument of type 'boolean' is not assignable to parameter of type 'string | number'.
processValue(true);
O último tipo que vamos analisar é o tipo void. Quando você tem uma função que não retorna um valor, esse seria um tipo void.
Aqui está um exemplo:
type Status = "loading" | "success" | "error";
type Handler = {
status: Status;
onChange: (newStatus: Status) => void;
};
Neste exemplo, a propriedade onChange para o tipo Handler não retorna nada, por isso está sendo usado void.Este módulo não possui perguntas. Marque como concluído.