在这里,我有一个组件应该打印一个 toast,根据 toast 的类型在内容中添加一个图标:
import * as React from 'react';
import { toast } from 'react-toastify';
import { FaInfo, FaCheck, FaExclamationTriangle, FaBug, FaExclamationCircle } from 'react-icons/fa';
import { TypeOptions, ToastContent, Toast } from 'react-toastify/dist/types/index';
interface IToast {
message: ToastContent;
type: TypeOptions;
}
const displayIcon = ({ type }: IToast) => {
switch (type) {
case 'success':
return <FaCheck />;
case 'info':
return <FaInfo />;
case 'error':
return <FaExclamationCircle />;
case 'warning':
return <FaExclamationTriangle />;
default:
return <FaBug />;
}
};
const myToast = ({ type, message }: IToast): Toast => {
return toast[type](
<div>
<div>
{displayIcon(type)}
</div>
<div>{message}</div>
</div>,
);
};
export default myToast;
我通过执行以下操作在另一个组件上渲染 myToast:
const notify = React.useCallback((message: ToastContent, type: ToastOptions) => {
lomplayToast({ message, type });
}, []);
这些组件已经可以工作,并且可以按预期进行。但我无法做出好的类型声明。该Toast
接口带有几个接口和类型声明。其中之一是ToastOptions
displayIcon 能够检索的类型。我的问题:
- 为什么
toast[type]
属性会抛出“类型'{(消息:ToastContent,类型:TypeOptions | undefined):ReactText; ...”上不存在属性'default'?这个默认属性是从哪里来的?