亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

React和TypeScript - 如果props存在,則使用條件參數(shù)類型
P粉148434742
P粉148434742 2023-07-18 20:17:03
0
1
852

在React中,我正在嘗試根據(jù)組件中是否傳遞了prop來(lái)設(shè)定一個(gè)條件類型在函數(shù)參數(shù)中。

這是一個(gè)例子,我有這個(gè)元件:

const DatePicker = ({
  handleDateChange,
  value,
  objectKey,
}: {
  handleDateChange: (value: Dayjs | { [x: string]: Dayjs }) => void;
  value: Dayjs;
  objectKey?: string;
}) => JSX

我想要做的是,如果"objectKey"作為props傳遞,那麼handleDateChange函數(shù)中的"value"參數(shù)的類型將是{ [x: string]: Dayjs },否則它將是value: Dayjs。

有人知道如何實(shí)現(xiàn)這個(gè)嗎?

P粉148434742
P粉148434742

全部回覆(1)
P粉852578075

你可以透過(guò)函數(shù)重載來(lái)達(dá)到類似的效果。

// first overload signature
function DatePicker({
  handleDateChange,
  value,
}: {
  handleDateChange: (value: Dayjs) => void;
  value: Dayjs;
}): JSX;
// second overload signature
function DatePicker({
  handleDateChange,
  value,
  objectKey,
}: {
  handleDateChange: (value: { [x: string]: Dayjs }) => void;
  value: Dayjs;
  objectKey?: string;
}): JSX;
// implementation
function DatePicker({
  handleDateChange,
  value,
  objectKey,
}: {
  handleDateChange: ((value: Dayjs) => void) | ((value: { [x: string]: Dayjs }) => void);
  value: Dayjs;
  objectKey?: string;
}) {
  // ...
}

使用這種方法,DatePicker只能按照你的定義進(jìn)行調(diào)用,但實(shí)作部分不知道handleDateChange和objectKey之間的關(guān)聯(lián),因此仍然需要明確處理。

不了解DatePicker的任何細(xì)節(jié),我認(rèn)為最好只使用一個(gè)簽名,讓父元件對(duì)DatePicker進(jìn)行調(diào)整,而不是讓DatePicker處理來(lái)自父元件的特殊情況。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板