Тип "строка" нельзя присвоить типу "GET" - PullRequest
0 голосов
/ 07 мая 2020

У меня есть специальный хук, который использует библиотеку axios для выполнения некоторых запросов:

const useCustomHook = ({ endPoint = "", method = "GET", options = {} }) => {
  const [data, setData] = useState([]);


  const [request, setRequest] = useState<AxiosRequestConfig>({
    url: endPoint,
    method,
    headers: {},
    data: options
  });

{...}
}

Я использую типы Ax ios (AxiosRequestConfig), которые объявляют method из type Method:

type Method =
  | 'get' | 'GET'
  | 'delete' | 'DELETE'
  | 'head' | 'HEAD'
  | 'options' | 'OPTIONS'
  | 'post' | 'POST'
  | 'put' | 'PUT'
  | 'patch' | 'PATCH'

К сожалению, method выделяет следующую ошибку: Type 'string' is not assignable to type '"GET" | "get" | "delete" | "DELETE" | "head" | "HEAD" | "options" | "OPTIONS" | "post" | "POST" | "put" | "PUT" | "patch" | "PATCH" | undefined'.

code error

Я могу всегда вводите method как string, но это нарушит безопасность типов, которые я ищу.

1 Ответ

2 голосов
/ 07 мая 2020

Я всегда могу набрать method как string, но это нарушит безопасность типов, которые я ищу.

method должно иметь тип Method из axios, а не string:

interface CustomHookParam {
    endPoint?: string;
    method?:   Method; // <=== type is `Method` from `axios`'s types
    options?:  SomeAppropriateTypeForTheOptions;
}
const useCustomHook = ({ endPoint = "", method = "GET", options = {} }: CustomHookParam) => {

Поскольку все они имеют значения по умолчанию, вы можете захотеть установить и общий параметр:

const useCustomHook = ({ endPoint = "", method = "GET", options = {} }: CustomHookParam = {}) => {
// −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^^^^^

На детской площадке

...