Javascript TypeScript-只有在有值时才在POST上发送可选字段

Javascript TypeScript-只有在有值时才在POST上发送可选字段,javascript,reactjs,typescript,formik,http-method,Javascript,Reactjs,Typescript,Formik,Http Method,我正在React应用程序中使用Formik。我有一个包含3个字段的简单表单。我用那个表格做了两次手术。添加/编辑资源 我的问题是一个字段是可选的。也就是说,如果它的值为null,我就不应该发送它当前,我发送了一个错误的空字符串。 我正在使用TS React-Formik,下面是我的handleSubmit方法代码: interface IValues extends FormikValues { name: string; owner?: string; groups: string

我正在React应用程序中使用Formik。我有一个包含3个字段的简单表单。我用那个表格做了两次手术。添加/编辑资源

我的问题是一个字段是可选的。也就是说,如果它的值为null,我就不应该发送它当前,我发送了一个错误的空字符串。

我正在使用TS React-Formik,下面是我的
handleSubmit
方法代码:

interface IValues extends FormikValues {
  name: string;
  owner?: string;
  groups: string[];
}

interface CreateAndEditProps {
  doSubmit(service: object, values: object): AxiosResponse<string>;
  onSave(values: IValues): void;
}

handleSubmit = (values: FormikValues, formikActions:FormikActions<IValues>) => {
    const { doSubmit, onSave, isEditMode } = this.props;
    const { setSubmitting } = formikActions;
    const payload: IValues = {
      name: values.name,
      groups: values.groups,
      owner: values.owner
    };
    const submitAction = isEditMode ? update : create;
    return doSubmit(submitAction, payload)
      .then(() => {
        setSubmitting(false);
        onSave(payload);
      })
      .catch(() => {
        setSubmitting(false);
      });
  };
接口IValues扩展FormikValue{
名称:字符串;
所有者?:字符串;
组:字符串[];
}
接口CreateAndEditProps{
doSubmit(服务:对象,值:对象):AxiosResponse;
onSave(值:IValues):无效;
}
handleSubmit=(值:FormIkValue,formikActions:formikActions)=>{
const{doSubmit,onSave,isEditMode}=this.props;
常数{setSubmitting}=形成作用;
常量有效载荷:IValues={
name:values.name,
组:值。组,
所有者:values.owner
};
const submitAction=isEditMode?更新:创建;
返回剂量提交(提交、有效载荷)
.然后(()=>{
设置提交(假);
onSave(有效载荷);
})
.catch(()=>{
设置提交(假);
});
};
我认为一个简单的if语句会起作用,虽然它起作用,但我一点也不喜欢它。让我举个例子说明原因。如果我以类似的形式再添加两个可选字段(我将要这样做),我不想使用几个If语句来实现这一点


如果你能想出一种更优雅、更干练的方法,那将是令人惊奇的。感谢您抽出时间。

请看下面的removeEmptyKeys()。 它接收一个对象并删除具有空字符串的键。它会改变原始对象,如果您希望出现差异行为,请相应地更改它

在定义有效负载后的代码中,我只需调用此方法,removemptykeys(有效负载)

它还将解决您的if-else问题

removemptykeys=(项目)=>{
Object.key(item).map((key)=>{
如果(有效负载[键]=“”){
删除有效负载[key]}
})}
var有效载荷={
一:"一",,
两个:“,
三:“三”
}

removeEmptyKeys(有效负载)
谢谢您的回答。不过有一条评论。这是代码,我曾经让它工作。请将其添加到您的描述中。我会把它标记为正确的
const removemptykeys=(值:IValues):any=>{debugger;Object.keys(values).map((key)=>{if(有效载荷和有效载荷[key]==“”){delete payload[key]}}返回值;}