首頁  >  問答  >  主體

有效的輸入方法:條件渲染控制指南

<p>我正在嘗試輸入條件渲染,但是它報錯了:<code>Element implicitly has an 'any' type because expression of type 'number' can't be used to index type 'types'. No index signature' can't be used to index type 'types'. No index signature with a parameter of type 'number' was found on type 'types'.</code> 當所有內容都是"any"時,渲染是有效的。 </p> <pre class="brush:php;toolbar:false;">interface types { '0': JSX.Element; '1': JSX.Element; '2': JSX.Element; } export default function Economy(props: any) { const [step, setStep] = useState(0) const render = () => { const component: types = { '0': <Home />, '1': <Create />, '2': <Detail />, } return component[step] } return ( {render()} )</pre> <p>有人能幫我理解如何為這個條件渲染添加類型嗎? </p> <p>我需要理解如何為這個條件渲染添加類型</p>
P粉550257856P粉550257856453 天前482

全部回覆(2)我來回復

  • P粉823268006

    P粉8232680062023-08-16 16:02:42

    當對一個物件進行索引時,你需要使用 keyof 運算子。 來自 TypeScript 文件:

    interface types {
      '0': JSX.Element;
      '1': JSX.Element;
      '2': JSX.Element;
    }
    
    export default function Economy(props: any) {
      const [step, setStep] = useState<keyof types>("0")
    
      const render = () => {
        const component: types = {
          '0': <Home />,
          '1': <Create />,
          '2': <Detail />,
        }
        return component[step]
      }
    return (
       {render()}
    )

    回覆
    0
  • P粉008829791

    P粉0088297912023-08-16 14:40:17

    您的stepnumber類型,不能用於索引types,因為types只有1,2, 3。所以您可以手動將step設定為keyof types

    const [step, setStep] = useState<keyof types>(0)

    由於step是一個數字,您還需要鍵:

    interface types {
      0: JSX.Element;
      1: JSX.Element;
      2: JSX.Element;
    }
     const component: types = {
          0: <Home />,
          1: <Create />,
          2: <Detail />,
        }
     return component[step] // 没有错误

    回覆
    0
  • 取消回覆