const formatDate = (date: Date) =>
  `${date.getHours()}:${String(date.getMinutes()).padStart(2, '0')} ${String(
    date.getSeconds(),
  ).padStart(2, '0')}.${String(date.getMilliseconds()).padStart(3, '0')}`

type PokemonData = {
  id: string
  number: string
  name: string
  image: string
  fetchedAt: string
  attacks: {
    special: Array<{
      name: string
      type: string
      damage: number
    }>
  }
}

async function fetchPokemon(name: string): Promise<PokemonData> {
  const pokemonQuery = `
    query PokemonInfo($name: String) {
      pokemon(name: $name) {
        id
        number
        name
        image
        attacks {
          special {
            name
            type
            damage
          }
        }
      }
    }
  `

  const response = await window.fetch('https://graphql-pokemon2.vercel.app/', {
    // learn more about this API here: https://graphql-pokemon2.vercel.app/
    method: 'POST',
    headers: {
      'content-type': 'application/json;charset=UTF-8',
    },
    body: JSON.stringify({
      query: pokemonQuery,
      variables: {name: name.toLowerCase()},
    }),
  })

  type JSONResponse = {
    data?: {
      pokemon: Omit<PokemonData, 'fetchedAt'>
    }
    errors?: Array<{message: string}>
  }
  const {data, errors}: JSONResponse = await response.json()
  if (response.ok) {
    const pokemon = data?.pokemon
    if (pokemon) {
      // add fetchedAt helper (used in the UI to help differentiate requests)
      return Object.assign(pokemon, {fetchedAt: formatDate(new Date())})
    } else {
      return Promise.reject(new Error(`No pokemon with the name "${name}"`))
    }
  } else {
    // handle the graphql errors
    const error = new Error(errors?.map(e => e.message).join('\n') ?? 'unknown')
    return Promise.reject(error)
  }
}

TypeScript相关代码片段

exists status

how to check text length in angular

get current time ts

cannot import bcrypt

reset form in angular typescript

nextjs get url params api app route

select between brackets vscode macbook

vercel config for express

jest it sleep

tailwindcss-debug-screens

MY_MOMENT_FORMATS LT

nextjs multiple image hostnames

DatetimeFormatOptions typescript

typescript generic

typescript Dictionary

npm circuit breaker

angular httpinterceptor + for file uploads

comments using regex

nestjs client streaming grpc client

nodejs curicuit breaker

data table tanstack custom pagination number

typescript interface react

typescript get keys of type

jest testing ts

jest sleep between tests too many requests

disable prop types eslint

exports is not defined

ts any key in object

cypress configure browser size

i18next change language

i18n change language

nextjs 14 route api creation

i18next check current language

arc shortcuts windows

sequelize relation where

typescript omit for enums

setup TypeScript in tsconfig.json

typescript is checking types from user directory

vite.config.ts resolve

zod one of string

sequelize where relationship

collapsable sidebar shadcn

ts disable its value is never used

rtk query programmatically

papa parse convert to object

Overflow:hidden dots at the end

awaited typescript

typescript print to console

git how to view all commits before push

how to use external fonts in react

change shadcn select placeholder color

ts get type of object values

How to add todo

zod error message

tailwindcss screen debugger in nextjs

does fcm automatically starts on reboot?

run vite app

max amount validator

redis client type typescript

omit more than one typescript

vscode md snippets for mdx also

check if user exists firebase

add custom class in tailwindcss

initialize array of specific size

typescript create type from array of strings

shadcn dialog programmatically

nodejs file stream

observablehq copy data

object is possibly 'null'.ts(2531)

start a typescript backend nodejs

nestjs http module

typing when fetching data in ts

ts nspell usage

Custom Painting Template

export import ts interface

how to add fonts to flutter

sequelize literal attributes

passing react component as variables

sequelize returning update

how to initialize/setup typescript