iT邦幫忙

0

[MUI][React][Typescript] 如何傳遞型別給SelectProps?

  • 分享至 

  • xImage

以下的code標註的那段會得到報錯"Type 'unknown' cannot be used as an index type."

原因是MUI的interface SelectProps的泛型T預設為unknown,請問是否有方法可以傳遞型別參數給T,讓value不再是unknown?

雖然改用Select的話不會有這個問題,但是Select好像沒辦法讓label固定顯示在那邊,所以才用TextField去弄

function App() {
  const map = {
    Ten:'十',
    Twenty:'二十',
  };

  return (
    <div className="App">
      <TextField id="select" label="Age" value="20" select SelectProps={{
        renderValue:(value) => {
          console.log(value)

          // 這裡
          return <p>{map[value]}</p>
        }
      }}>
        <MenuItem value="10">Ten</MenuItem>
        <MenuItem value="20">Twenty</MenuItem>
      </TextField>
    </div>
  );
}

以上,如果有人知道請告訴我,謝謝

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
小哈片刻
iT邦研究生 5 級 ‧ 2023-01-12 00:00:57

可以直接為value定型就好了

...
renderValue:(value: string) => {
    ...
}
...

感謝回覆

不過設為any還是會報錯"Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{ Ten: string; Twenty: string; }'."

小哈片刻 iT邦研究生 5 級 ‧ 2023-01-12 22:46:28 檢舉

那可能你的tsconfig比較嚴格, 不喜歡any
這樣的話,你就

...
renderValue:(value: string) => {
    ...
}
...
0
Charlie
iT邦新手 5 級 ‧ 2023-01-12 10:41:01

keyof + typeof
https://ithelp.ithome.com.tw/upload/images/20230112/20151334aKq4u08fj0.png

看更多先前的回應...收起先前的回應...
Charlie iT邦新手 5 級 ‧ 2023-01-12 10:41:32 檢舉

感謝回覆

想進一步請教除了keyof typeof 以外還做了甚麼嗎?

我之前試過這個方式,不過會報錯"Type '(value: "Ten" | "Twenty") => JSX.Element' is not assignable to type '(value: unknown) => ReactNode'.
Types of parameters 'value' and 'value' are incompatible.
Type 'unknown' is not assignable to type '"Ten" | "Twenty"'.ts(2322)"

剛剛試著把tsconfig改成跟DEMO還是報同樣的錯
Charlie iT邦新手 5 級 ‧ 2023-01-13 09:38:17 檢舉

keyof typeof 就很單純(如圖片)
有辦法透過DEMO還原問題嗎?

再次感謝回覆

這個問題我也不確定為什麼,但就是沒辦法還原

不過至少確定了一點是無法傳遞型別參數給T

最後是使用型別守衛的方式繞開了

我要發表回答

立即登入回答