strict: true ativa as verificações do compilador que capturam parâmetros de rota indefinidos, formas de API desatualizadas e any implícito em pontes nativas - antes que o Metro compile uma tela com falha. No Expo SDK 57, você estende expo/tsconfig.base e aperta incrementalmente em vez de lutar contra um muro de mil erros.
Cartão de receita de referência rápida - pronto para copiar e colar.
# Verifique os tipos sem emitir JS (amigável para CI)npx tsc --noEmit# Acompanhe os erros restantes durante a migraçãonpx tsc --noEmit 2>&1 | rg "error TS" | wc -l
// tsconfig.json - Linha de base do Expo SDK 57{ "extends": "expo/tsconfig.base", "compilerOptions": { "strict": true, "noUncheckedIndexedAccess": true }, "include": ["**/*.ts", "**/*.tsx", ".expo/types/**/*.ts", "expo-env.d.ts"]}
Quando usar isso:
Novos projetos Expo TypeScript - mantenha strict: true desde o primeiro dia.
Aplicativos que leem useLocalSearchParams() ou payloads de notificação push sem validação.
Auxiliares de API que JSON.parse em objetos tipados sem verificações em tempo de execução.
Migrações brownfield movendo telas .js para .tsx sem um congelamento de recursos.
Portões de CI que precisam bloquear mesclagens quando uma alteração de hook compartilhado quebra telas distantes.
// Prefer import type for types-only - verbatimModuleSyntax enforces clarityimport type { Order } from "@/lib/api/orders";import { fetchOrder } from "@/lib/api/orders";// StyleProp<ViewStyle> for components accepting style overridesimport type { StyleProp, ViewStyle } from "react-native";interface CardProps { title: string; style?: StyleProp<ViewStyle>;}
// Temporary suppression - prefer @ts-expect-error with a ticket over @ts-ignore// @ts-expect-error RN-204 - LegacyDeviceModule untyped until bridge wrapper landsconst reading = NativeModules.LegacyDeviceModule.getLastReading();
Desabilitar strict para ter CI verde - A compilação passa enquanto any vaza para as camadas de navegação e busca. Correção: Corrija os limites primeiro; use @ts-expect-error com IDs de ticket para lacunas legadas conhecidas.
Ruído noUncheckedIndexedAccess em índices seguros - Cada items[0] se torna T | undefined. Correção: Estreite com if (item), use .at(0) com uma verificação ou um pequeno auxiliar function first<T>(arr: T[]): T | undefined - evite asserções ! genéricas.
useLocalSearchParams() não tipado - Links profundos entregam strings; chaves ausentes se tornam undefined em tempo de execução. Correção: Analise os parâmetros em uma função por tela; lance um erro ou redirecione quando as chaves necessárias estiverem ausentes.
skipLibCheck: false durante atualizações do SDK - Conflitos dentro de @types/react e tipagens do RN bloqueiam mesclagens não relacionadas ao seu código. Correção: Mantenha skipLibCheck: true (padrão do Expo) a menos que você mantenha forks personalizados do DefinitelyTyped.
tsc não vê os tipos do Expo Router - Arquivos gerados residem em .expo/types. Correção: Adicione .expo/types/**/*.ts a include e execute npx expo customize tsconfig.json após habilitar rotas tipadas.
Regras ESLint cientes de tipos sem parserOptions.project - Regras como @typescript-eslint/no-floating-promises silenciosamente ignoram ou geram erros. Correção: Aponte o ESLint para tsconfig.json ou execute essas regras apenas em um trabalho de CI dedicado.