Issue
I currently have the function below which works fine:
export const optionsFunc: Function = (token: string) => {
  const options = {
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${token}`,
    }
  };
  return options;
};
Now I want to modify it to add params to the options variable;
params needs to be a key/value and not mandatory variable;
How can I modify the options variable and the function parameter params to do that?
I'm looking for something like this in the end:
export const optionsFunc: Function = (token: string, params: any) => {
  const options = {
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${token}`,
    },
  };
  if (params) {
    const filteredParams = Object.entries(params).reduce(
      (a, [k, v]) => (v == null || v === 'null' ? a : (a[k] = v, a)), {}
    );
    options.params = filteredParams;
  }
  return options;
};
                            Solution
You should probably use a Record to describe your object:
export const optionsFunc = (token: string, params?: Record<string, unknown>) => {
  const options = {
    params: {} as Record<string, unknown>,
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${token}`,
    },
  };
  if (params) {
    const filteredParams = Object.entries(params).reduce<Record<string, unknown>>(
      (a, [k, v]) => (v == null || v === 'null' ? a : (a[k] = v, a)), {}
    );
    options.params = filteredParams;
  }
  return options;
};
Also, please don't annotate optionsFunc as Function. That throws away your types you put in the arrow function and the return type.
Later on, we use the Record again to describe options.params and the return type of the reduce call.
Answered By - caTS
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.