typeguards - TypeScript: Guarda de Tipo para tipo personalizado
Objetivo: Tentando criar um guardião de tipo para um tipo personalizado.
Aqui está meu tipo personalizado:
type AppProviders = 'box' | 'dropbox' | 'google';
Esta é a minha primeira tentativa de criar um type guard, mas isso parece redundante ao declarar os valores permitidos duas vezes:
type AppProviders = 'box' | 'dropbox' | 'google';
const appProviders: AppProviders[] = [ 'box', 'dropbox', 'google' ];
function isAppProviders(provider): provider is AppProviders {
return appProviders.includes(provider)
}
Existe uma maneira melhor de fazer uma verificação de tipo para tipos literais personalizados?
Obrigado
Resposta #1
A razão pela qual você está recebendo esse erro é porque:
https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-aliases
type Easing="ease-in" | "ease-out" | "ease-in-out";
Os tipos literais de string permitem que você especifique o valor exato que uma string deve ter. Na prática, os tipos literais de string combinam bem com tipos de união, guardas de tipos e aliases de tipo. Você pode usar esses recursos juntos para obter um comportamento semelhante ao de enum com strings.
Eu tive que pesquisar isso.... o exemplo que encontrei foi https://www.damirscorner.com/blog/posts/20200619-StringLiteralTypeGuardInTypescript.html
export const APP_PROVIDERS = ['a', 'b'] as const;
export type AppProviders = typeof APP_PROVIDERS[number];
export function isAppProviders(unknownString: string): unknownString is AppProviders {
return (APP_PROVIDERS as unknown as string[]).includes(unknownString);
}
