reactjs - Tipul string nu poate fi atribuit tipului
Încerc să creez o constantă care poate avea doar două valori, așa cum se arată în cod. Și state.lang este deja sigură din punct de vedere al tipului ca en | ar.
const keyname: 'owner_name_en' | 'owner_name_ar' = 'owner_name_' + state.lang;
Primeasc eroarea: Type 'string' is not assignable to type '"owner_name_en" | "owner_name_ar"'
Cum pot să repar această eroare?
Răspuns #1
Motivul este că declari un nou tip inline (ca un enum de șiruri) ale cărui singure valori posibile sunt 'owner_name_en' | 'owner_name_ar' (și null).
Este echivalent cu
type OwnerNameLang = 'owner_name_en' | 'owner_name_ar';
const keyname: OwnerNameLang = 'owner_name_' + state.lang;
Acum, nu poți concatena diferite tipuri în acest fel mai mult decât ai putea face asta
const str: "hello" = "hel" + "lo"
sperând să obțină tipul inline nenumit ale cărui singure valori posibile sunt null și "hello" (deoarece partea dreaptă a atribuției este, de asemenea, două <string> în cazul tău).
Trebuie să folosești aserțiunea de tip, cum ar fi
type OwnerNameLang = 'owner_name_en' | 'owner_name_ar';
const keyname: OwnerNameLang = ('owner_name_' + state.lang) as OwnerNameLang ;
În acest moment, poate fi de preferat să folosești un obiect cu mai multe proprietăți decompozabile (astfel încât să poți păstra doar en/ar ca un enum de tip string și să generezi acel string într-un alt mod). Dar fără a ști mai multe despre scopul acestui string, este greu să sugerez o alternativă mai bună.
Voi adăuga că sunt un susținător foarte puternic al siguranței tipurilor, în mare parte pentru că ajută dezvoltatorul să observe când, într-o zi, descoperă un nou state.lang și uită să-l gestioneze peste tot. Uneori, totuși, un șir de caractere este suficient. Decizia vă aparține.
