Ask*_*mov 5 typescript reactjs material-ui
我有以下 React + Material DatePicker 代码,从各自的文档中逐字复制。
let App: React.FC = () => {
const [dateStart, handleDateStart] = useState(new Date());
const [dateEnd, handleDateEnd] = useState(new Date());
return (
    // Pickers from Material https://material-ui-pickers.dev/getting-started/usage
    <MuiPickersUtilsProvider utils={DateFnsUtils}>
        <DateTimePicker value={dateStart} onChange={handleDateStart}/>
        <DateTimePicker value={dateEnd} onChange={handleDateEnd}/>)
    </MuiPickersUtilsProvider>);
};
Run Code Online (Sandbox Code Playgroud)
但是,我用 TypeScript 编写,它抱怨onChange位:
Error:(28, 47) TS2322: Type 'Dispatch<SetStateAction<Date>>' is not assignable to type '(date: MaterialUiPickersDate) => void'.
Types of parameters 'value' and 'date' are incompatible.
 Type 'MaterialUiPickersDate' is not assignable to type 'SetStateAction<Date>'.
 Type 'null' is not assignable to type 'SetStateAction<Date>'.
Run Code Online (Sandbox Code Playgroud)
配置:
{
  "compilerOptions": {
    "target": "es5",
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react"
  },
  "include": [
    "src"
  ]
}
Run Code Online (Sandbox Code Playgroud)
我是 React 和 Material 的新手,我该如何避免这个错误?
Dmi*_*nko 10
问题是 datepicker 也可以返回null(如果值为空)
工作示例:
const [date, setDate] = React.useState<Date | null>(new Date());
return (
  <DatePicker
    value={date} 
    onChange={newDate => setDate(newDate)} 
  />
)
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           3356 次  |  
        
|   最近记录:  |