useStateとInterFace

9493 ワード

    interface CoinInterface {
      id: string;
      name: string;
      symbol: string;
      rank: number;
      is_new: boolean;
      is_active: boolean;
      type: string;
    }

    const Loader = styled.span`
      text-align: center;
      display: block;
    `;

    function Coins() {
      const [coins, setCoins] = useState<CoinInterface[]>([]);
      const [loading, setLoading] = useState(true);
      useEffect(() => {
        (async () => {
          const response = await (
            await fetch("http://api.coinpaprika.com/v1/coins")
          ).json();
          setCoins(response.slice(0, 101));
          setLoading(false);
        })();
      }, []);
      return (
        <Container>
          <Header>
            <Title>Coin Tracker</Title>
          </Header>
          {loading ? (
            <Loader>Loading...</Loader>
          ) : (
            <CoinsList>
              {coins.map((coin) => (
                <Coin key={coin.id}>
                  <Link to={`/${coin.id}`}>{coin.name} &rarr;</Link>
                </Coin>
              ))}
            </CoinsList>
          )}
        </Container>
      );
    }
const [coins, setCoins] = useState<CoinInterface[]>([]);
この点は本当に分かりません.
arrayがusStateからinitialValueまで、<CoinInterface>と書くと
Argument of type 'never[]' is not assignable to parameter of type 'CoinInterface | (() => CoinInterface)'
これで間違いだパンツで聞くと、上のように書いてあるとタイプスクリプトが理解できないかもしれません.
したがって,インタフェースにもタイプを別途明記する.