‘(value: any) => any[]’ 類型的參數不能分配給’string[]’ 類型的參數


我正在嘗試將值推送到狀態數組,但無法獲得 TS 錯誤。我將把可以看到錯誤的相關組件放在這裡。錯誤出在子組件上,更具體地說是在 handleValue(value => [...value, item.value])

錯誤:

'(value: any) => any[]' 類型的參數不能分配給'string[] 類型的參數

父組件:

const ChooseValuesScreen: React.FC = ({ navigation}) => {
  const [value, setValue] = useState([]);
  const [valuesProgress, setValuesProgress] = useState(0);
  const [convertPercentageIntoUnit, setUnit] = useState(0)
  const [numberOfValuesSelected, setNumberOfValuesSelected] = useState(0);
    使用佈局效果(()=> {
        導航.setOptions({
            標頭顯示:假,
        })
        setUnit(valuesProgress ? 1 : 0)
        setNumberOfValuesSelected(numberOfValuesSelected + convertPercentageIntoUnit)
    }, [navigation,valuesProgress, convertPercentageIntoUnit, value])

    const renderItem: ListRenderItem = ({item}) => ;

    返回 (
      
             item.id}
            渲染項={渲染項}
            風格={[tw``,{}]}
            顯示VerticalScrollIndicator ={false}
            顯示Horizo​​ntalScrollIndicator={false}
            列數={3}
            columnWrapperStyle={{ flex: 1, justifyContent: "center"}}
            />
        
    )
}

導出默認選擇值屏幕;

子組件:

export type Props = {
    項目:任何,
    colorOnPress:字符串,
    PickActiveOpacity:數字,
    handleProgress: (valuesProgress: number) => void;
    valuesProgress:數字,
    處理值:(值:字符串 [])=> 無效;
  };

const CustomButton: React.FC = ({ item ,pickedActiveOpacity, colorOnPress, handleProgress, valuesProgress, handleValue }) => {
    返回 (
            
                 {
                    如果(值進度  [...value, item.value])
                    }}}>
                    {item.value}
                
            
    )
}
導出默認自定義按鈕;

如果我只傳遞一個值 handleValue(item.value),則不會出現錯誤,狀態數組將接收該值,但我想要的是將值保留在數組中並且沒有一個值替換另一個。
有什麼想法嗎?

我最終通過將函數類型聲明更改為:
handleValue((value:any) => [...value, item.value])在子組件中,props為handleValue: (value:any) => void;

我相信有更好的方法可以做到這一點,如果有人有更好的解決方案,請告訴我

在您的道具中,您聲明了 handleValue: (value : string[]) => void; 這意味著您的函數將一個參數 value 作為字符串數組

在這裡 handleValue(value => [...value, item.value]) 你傳遞一個函數作為 agrument 而不是 string[]

更新。

type CustomFunction = (value: string) => string[]
...
// 在你的道具中
handleValue: (CustomFunction) => void