Noções Básicas do SDK TypeScript/JavaScript
11 exemplos para você começar com o SDK TypeScript/JavaScript, 7 básicos e 4 intermediários.
Pré-requisitos / Instalação Rápida
- Node.js 18+ (ou um runtime de edge como Vercel Edge, Cloudflare Workers ou Deno Deploy, já que o SDK é baseado em fetch).
- Instale o pacote:
npm install @anthropic-ai/sdk. - Uma chave de API do Claude Console, configurada como a variável de ambiente
ANTHROPIC_API_KEY. - TypeScript 5+ recomendado para que você obtenha os tipos embutidos do SDK sem configuração adicional.
Exemplos Básicos
1. Instale o Pacote
Adicione o SDK oficial ao seu projeto com o gerenciador de pacotes de sua preferência.
npm install @anthropic-ai/sdk- O SDK envia seus próprios tipos TypeScript, portanto, nenhum pacote
@typesseparado é necessário. - Ele é baseado em
fetchinternamente, é por isso que roda sem modificações no Node.js e em runtimes de edge. - Funciona com npm, pnpm, yarn ou bun, já que é publicado como um pacote npm padrão.
2. Configure a Chave de API via Variável de Ambiente
Armazene sua chave de API fora do seu código-fonte e deixe o cliente pegá-la automaticamente.
# .env.local (nunca comite este arquivo)
ANTHROPIC_API_KEY=sk-ant-...- O SDK lê
process.env.ANTHROPIC_API_KEYpor padrão, então raramente você precisará passar uma chave explicitamente no código. - Manter a chave em uma variável de ambiente evita vazá-la no controle de versão ou em bundles do lado do cliente.
- No Next.js, referencie esta variável apenas a partir de código do lado do servidor (route handlers, server actions), nunca em componentes do cliente.
- Use um gerenciador de segredos ou as configurações de variável de ambiente do seu provedor de hospedagem em produção em vez de um arquivo
.envcomitado.
3. Instancie o Cliente
Crie uma instância do cliente Anthropic uma vez e reutilize-a entre as requisições.
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
// Lê ANTHROPIC_API_KEY de process.env automaticamentenew Anthropic()sem argumentos pegaANTHROPIC_API_KEYdo ambiente.- Você pode substituir a chave explicitamente com
new Anthropic({ apiKey: "..." })se estiver carregando-a de uma fonte de segredos personalizada. - Crie o cliente uma vez no escopo do módulo e importe-o onde for necessário, em vez de construir uma nova instância por requisição.
- O mesmo cliente funciona em runtimes Node.js e de edge sem qualquer configuração condicional.
Relacionado: O Modelo Mental do SDK TypeScript da Anthropic - como o cliente e seu transporte baseado em fetch se encaixam
4. Envie uma Mensagem Básica
Chame client.messages.create() para obter uma resposta única e não transmitida do Claude.
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
const message = await client.messages.create({
model: "claude-sonnet-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Explique o que é um closure em uma frase." }],
});
console.log(message.content);model,max_tokensemessagessão os campos obrigatórios para uma chamadamessages.create().claude-sonnet-5é o modelo padrão na linha atual do Claude e um bom ponto de partida para a maioria das tarefas.- A chamada retorna uma promessa, então ela deve ser aguardada (ou tratada com
.then()). message.contenté um array de blocos de conteúdo, não uma string simples, já que uma resposta pode misturar texto, chamadas de ferramentas e outros tipos de blocos.
Relacionado: Referência de Tipos do SDK TypeScript para Blocos de Conteúdo - o que está realmente dentro desse array de conteúdo
5. Leia a Resposta Tipada
Restrinja os blocos de conteúdo da resposta usando os tipos de união discriminados do SDK.
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
const message = await client.messages.create({
model: "claude-sonnet-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Diga olá em três idiomas." }],
});
for (const block of message.content) {
if (block.type === "text") {
console.log(block.text);
}
}- Cada bloco de conteúdo tem um discriminador
type("text","tool_use","thinking", e assim por diante), que o TypeScript usa para restringir o tipo. - Verificar
block.type === "text"antes de lerblock.textoferece segurança em tempo de compilação em vez de uma suposição com tipoany. - O tipo de resposta também inclui
usage,stop_reasonerole, todos totalmente tipados. - Este padrão escala diretamente para respostas de uso de ferramentas, onde você verificaria
block.type === "tool_use"em vez disso.
6. Mantenha uma Conversa Multi-Turno
Construa o array messages ao longo dos turnos para dar ao Claude o histórico da conversa.
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
const history: Anthropic.MessageParam[] = [
{ role: "user", content: "Qual é a capital da França?" },
{ role: "assistant", content: "A capital da França é Paris." },
{ role: "user", content: "Qual é a sua população?" },
];
const reply = await client.messages.create({
model: "claude-sonnet-5",
max_tokens: 512,
messages: history,
});Anthropic.MessageParamé o tipo exportado para uma única entrada de mensagem, útil para tipar arrays que você constrói ao longo do tempo.- O Claude não tem memória de servidor para turnos anteriores; a conversa completa deve ser reenviada como
messagesem cada chamada. - As funções alternam entre
"user"e"assistant", e o array geralmente deve começar com uma mensagem"user". - Anexe o texto de cada nova resposta a
historyantes da próxima chamada para manter a conversa crescendo corretamente.
7. Defina um Prompt do Sistema e um Limite de Tokens
Direcione o comportamento do Claude com um prompt system, separado da conversa em si.
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
const message = await client.messages.create({
model: "claude-sonnet-5",
max_tokens: 256,
system: "Você é um assistente conciso. Responda em uma única frase.",
messages: [{ role: "user", content: "Por que o céu é azul?" }],
});systemé um parâmetro de nível superior, não uma mensagem com a função"system", e se aplica a toda a requisição.max_tokenslimita o comprimento da resposta do Claude e conta contra seu uso, portanto, defina-o para o que a tarefa realmente precisa.- Reduzir
max_tokensagressivamente demais pode cortar uma resposta no meio do pensamento; verifiquestop_reasonna resposta se as respostas parecerem truncadas. - Troque
claude-sonnet-5porclaude-haiku-4-5em caminhos sensíveis à latência ouclaude-opus-4-8para as tarefas de raciocínio mais difíceis.
Exemplos Intermediários
8. Transmita uma Resposta com Iteradores Assíncronos
Consuma tokens à medida que chegam, em vez de esperar pela resposta completa.
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
const stream = client.messages.stream({
model: "claude-sonnet-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Escreva um haicai sobre bancos de dados." }],
});
for await (const event of stream) {
if (event.type === "content_block_delta" && event.delta.type === "text_delta") {
process.stdout.write(event.delta.text);
}
}client.messages.stream()retorna um iterador assíncrono, entãofor awaitconsome eventos sem a necessidade de configurar manualmente listeners de eventos.- Cada evento é tipado e discriminado por
event.type, espelhando o padrão usado para blocos de conteúdo. - O stream também expõe métodos auxiliares como
.finalMessage()se você quiser o resultado montado após o término do loop. - Prefira streaming para qualquer coisa renderizada ao vivo em uma interface de usuário; use
messages.create()quando você só precisar do texto final.
Relacionado: Iteradores Assíncronos para Streaming no SDK TypeScript - uma análise mais aprofundada do consumo de eventos de stream
9. Capture Erros Tipados
Trate falhas de API com as classes de erro específicas do SDK em vez de um catch-all genérico.
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
try {
await client.messages.create({
model: "claude-sonnet-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Olá" }],
});
} catch (error) {
if (error instanceof Anthropic.RateLimitError) {
console.warn("Limite de taxa atingido, aguarde e tente novamente.");
} else if (error instanceof Anthropic.APIConnectionError) {
console.error("Problema de rede ao alcançar a API.");
} else {
throw error;
}
}- Classes de erro como
RateLimitError,BadRequestErroreAPIConnectionErrorpermitem que você ramifique cominstanceofcom estreitamento de tipo completo. - Cada erro carrega um código de
statuse detalhes da resposta, úteis para log ou para exibir uma mensagem específica aos usuários. - Relançar erros desconhecidos (o ramo
else) evita engolir silenciosamente bugs que você não antecipou. - Este padrão vale a pena ser encapsulado em um helper compartilhado assim que você tiver mais de um ou dois pontos de chamada.
Relacionado: Referência de Classes de Erro do SDK TypeScript - a lista completa de classes de erro e quando cada uma delas dispara
10. Configure Retentativas, Timeouts e Cancelamento
Ajuste as configurações de resiliência e cancele requisições em andamento com AbortController.
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
maxRetries: 3,
timeout: 20_000,
});
const controller = new AbortController();
setTimeout(() => controller.abort(), 5_000);
const message = await client.messages.create(
{
model: "claude-sonnet-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Resuma isto em uma linha." }],
},
{ signal: controller.signal }
);maxRetriesetimeoutsão padrões em nível de cliente; ambos também podem ser substituídos por requisição.- Passar o
signalde umAbortControllercomo uma opção de requisição permite cancelar uma chamada a partir da interação do usuário (como um botão "Parar de gerar"). - Isso funciona da mesma forma em ambientes Node e de navegador, já que ambos implementam a API padrão
AbortController. - As retentativas só entram em vigor para falhas que podem ser retentadas (como erros de rede transitórios ou limites de taxa), não para erros de validação.
Relacionado: Padrões de Retentativa, Timeout e AbortController no SDK TypeScript - ajuste de backoff e cancelamento com mais detalhes
11. Execute o Mesmo Cliente em um Runtime de Edge
Use o código do cliente idêntico em uma Vercel Edge Function, Cloudflare Worker ou servidor Node.
export const runtime = "edge";
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
export async function POST(request: Request) {
const { prompt } = await request.json();
const message = await client.messages.create({
model: "claude-sonnet-5",
max_tokens: 512,
messages: [{ role: "user", content: prompt }],
});
return Response.json(message);
}- Como o SDK é construído sobre
fetch, este route handler não precisa de APIs específicas do Node e roda sem modificações sobexport const runtime = "edge". - A mesma chamada
new Anthropic()funciona se o código for executado no Node.js, Vercel Edge, Cloudflare Workers ou Deno Deploy. - Runtimes de edge geralmente têm limites mais rígidos de memória e tempo de execução, portanto, mantenha
max_tokense qualquer loop de streaming ciente disso. - Variáveis de ambiente como
ANTHROPIC_API_KEYainda precisam ser configuradas especificamente para o ambiente de edge, pois é um runtime separado da sua implantação Node.
Relacionado: Executando o SDK Anthropic em Runtimes de Edge - configuração e armadilhas específicas de edge | Definições de Ferramentas Fortemente Tipadas com Zod em TypeScript - tipando chamadas de ferramentas quando você vai além de mensagens de texto simples
Versões da Pilha: Escrito contra a linha de modelos Claude atualizada em ~junho de 2026 - Claude Fable 5, Claude Opus 4.8, Claude Sonnet 5 (o padrão) e Claude Haiku 4.5 - e o SDK oficial
@anthropic-ai/sdkTypeScript (última versão). Nomes de modelos, versões de SDK e preços mudam rapidamente - verifique os detalhes atuais em platform.claude.com/docs antes de confiar neles.