Material-UI Pickersでdate-fnsを使用する場合のカレンダーを日本語に設定します。 date-fnsが公式で提供する日本語用のロケールを使ってMaterial-UI Picker…
Material-UIのDatePickerをTypeScriptで使用する時、公式のリファレンス通りに記述すると型不一致のエラーが発生します。
エラープログラム
import React, { useState } from "react";
import { DatePicker } from "@material-ui/pickers";
const MonthPicker: React.FC = () => {
const [date, setDate] = useState(new Date());
return (
<DatePicker
label="label"
value={date}
onChange={setDate}
format="yyyy/MM/dd"
animateYearScrolling
/>
);
};
エラー内容
型 'Dispatch<SetStateAction<Date>>' を型 '(date: MaterialUiPickersDate) => void' に割り当てることはできません。
パラメーター 'value' および 'date' は型に互換性がありません。
型 'MaterialUiPickersDate' を型 'SetStateAction<Date>' に割り当てることはできません。
型 'null' を型 'SetStateAction<Date>' に割り当てることはできません。ts(2322)
BasePicker.d.ts(10, 5): 予期された型は、型 'IntrinsicAttributes & DateValidationProps & BasePickerProps & { variant?: "dialog" | "inline" | "static" | undefined; } & ... 4 more ... & { ...; }' に対してここで宣言されたプロパティ 'onChange' から取得されています
対応方法
DatePickerがnullを返却する可能性があり、そこで型が一致せずにエラーになります。
Dateとnullの両方が返却されるように定義することで解消できます。
// const [date, setDate] = useState(new Date());
const [date, setDate] = useState<Date | null>(new Date());
コメントを書く