reactjs - 如何解决 TypeScript 错误 "Type ' Dayjs' 缺少类型 'Date' 的属性“当将 Day.js 与 Material-UI DatePicker 一起使用时?

标签 reactjs typescript material-ui datepicker dayjs

我正在尝试在我的 React 项目中将 Day.js 与 Material-UI 的 DatePicker 组件结合使用。但是,当我将 minDatemaxDate 属性设置为 Day.js 对象时,我收到 TypeScript 错误:

Type 'Dayjs' is missing the following properties from type 'Date': toDateString, toTimeString, toLocaleDateString, toLocaleTimeString, and 35 more.

我了解 DatePicker 期望 minDatemaxDateDate 类型,但 Day.js 返回一个 Dayjs 对象。

代码:

import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider";
import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs";
import { DatePicker } from "@mui/x-date-pickers/DatePicker";
import dayjs from "dayjs";

interface DatepickerProperties {
  label: string;
  onChange: (value: Date | null) => void;
  disablePast?: boolean;
}

function Datepicker({
  label,
  onChange,
  disablePast = false,
}: DatepickerProperties) {
  return (
    <LocalizationProvider dateAdapter={AdapterDayjs}>
      <DatePicker
        disablePast={disablePast}
        label={label}
        onChange={onChange}
        minDate={dayjs()}
        maxDate={dayjs("9999-12-31")}
      />
    </LocalizationProvider>
  );
  );
}

预期行为: 我希望 DatePicker 组件接受 minDatemaxDate 作为 Day.js 对象,而不会出现任何 TypeScript 错误。

实际行为: 当我将 Day.js 对象用于 minDatemaxDate 时,我遇到了上面提到的 TypeScript 错误。

我尝试过的: 我尝试使用 toDate() 将 Day.js 对象转换为 Date 对象,但这会导致一堆其他错误:

AdapterDayjs.js:384 Uncaught TypeError: value.isAfter is not a function
    at AdapterDayjs.isAfterDay (AdapterDayjs.js:384:22)
    at getDefaultReferenceDate (getDefaultReferenceDate.js:53:38)
    at Object.getInitialReferenceValue (valueManagers.js:21:12)
    at useFieldState.js:58:41
    at mountState (react-dom.development.js:16986:20)
    at Object.useState (react-dom.development.js:17699:16)
    at Object.useState (react.development.js:1622:21)
    at useFieldState (useFieldState.js:48:35)
    at useField (useField.js:29:7)
    at useDateField (useDateField.js:29:10)

如何正确解决 TypeScript 错误?

最佳答案

您的代码看起来不错,但我认为您错误地传递了 DatepickerProperties 接口(interface)。

如果您想使用 Dayjs 对象进行日期操作,则应将 onChange 回调的类型从 Date 更改为 Dayjs。这样,您可以避免在 Date 和 Dayjs 对象之间进行转换并保持代码一致。

例如,您可以尝试以下操作:

import dayjs, { Dayjs } from "dayjs";

interface DatepickerProperties {
  label: string;
  onChange: (value: Dayjs | null) => void;
  disablePast?: boolean;
}

您可以看到整个示例here .

关于reactjs - 如何解决 TypeScript 错误 "Type ' Dayjs' 缺少类型 'Date' 的属性“当将 Day.js 与 Material-UI DatePicker 一起使用时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76749567/

相关文章:

reactjs - 带有图标的 Material ui自动完成

inheritance - 如何以编程方式 'open' Material-UI 选择字段?

reactjs - MUI 弹出框没有正确锚定(AnchorEl、React、material-table、MUI)

reactjs - React Developer Tools 将所有组件显示为 "Anonymous"

javascript - 我无法在 React 上实现 Lightbox Gallery

javascript - 为什么 <Route component={Menu}/> 而不是 <Menu/>?

java - DRY 原则 : Angular2/Typescript and Java back end object duplication

angular - 在 Angular5/6 中的 onload 方法之外访问文件阅读器内容?

css - 使用样式组件扩展样式不起作用

angular - 在 Angular2 Typescript 上使用 VTTCue 对象