Website-Suche

typescript - Typ 'string' ist nicht dem Typ '"GET" | "get" | …' zuweisbar


Ich habe einen benutzerdefinierten Hook, der die axios-Bibliothek verwendet, um einige Anfragen auszuführen:

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


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

{...}
}

Ich bringe die Axios-Typen (AxiosRequestConfig) mit, die method als Typ Method deklarieren:

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

Leider hebt method den folgenden Fehler hervor: Typ 'string' ist nicht zuweisbar an Typ '"GET" | "get" | "delete" | "DELETE" | "head" | "HEAD" | "options" | "OPTIONS" | "post" | "POST" | "put" | "PUT" | "patch" | "PATCH" | undefined'.

Ich kann immer method als string eingeben, aber das würde die Typensicherheit, die ich suche, zerstören.

Antwort #1

Ich musste eine Variable namens Methode mit dem Typ Method deklarieren und diese in die Anfrage einfügen.

let method: Method = 'POST';
const request = {
     ...
     method: method
     ...
}

Die ... sind nur andere, nicht mit der Frage zusammenhängende Variablen.

Antwort #2

Ich kann immer method als string eingeben, aber das würde die Typensicherheit, die ich suche, zerstören.

method sollte vom Typ Method aus axios sein, nicht string:

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

Da sie alle Standardwerte haben, möchten Sie möglicherweise auch den Gesamtparameter standardmäßig festlegen:

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

Auf dem Spielplatz

Verwandte Artikel