typescript - 'string' refererar bara till en typ, men används här som ett värde
Ny på TypeScript. Jag försöker sätta state men får det här felet.
Fel: 'string' refererar endast till en typ, men används här som ett värde.
const state = reactive({
user: {
uid: "",
provider: string[],
}
});
const user = auth.currentUser;
if (user != null) {
state.user.uid = user.uid || "";
user.providerData.forEach(function(profile) {
state.user.provider.push({
providerId: profile.providerId,
uid: profile.uid,
})
});
}
Svar #1
Baserat endast på detta påstående:
const state = reactive({
user: {
uid: "",
provider: string[],
}
});
Du har skrivit det med avsikten att ge provider-egenskapen en typ av string[], men i detta uttalande försöker det sätta värdet (inte typen) av variabeln och eftersom string[] inte är ett värde, kastar det felet. För att sätta värdet av provider till en array, som har typen string[], skulle du använda:
const state = reactive({
user: {
// initialize as "", type is automatically set to string
uid: "",
// create array and override its type to an array of strings
provider: [] as string[],
}
});
Men när vi tittar på hur du använder denna state-variabel:
const user = auth.currentUser;
if (user != null) {
state.user.uid = user.uid || "";
user.providerData.forEach(function(profile) {
state.user.provider.push({ // <-- this bit here is important
providerId: profile.providerId,
uid: profile.uid,
})
});
}
I dessa rader trycker du ett objekt av typen { providerId: string, uid: string } till din state.user.provider-array. Detta betyder att ditt första kodstycke faktiskt behöver vara:
const state = reactive({
user: {
// initialize as "", the type is automatically set to string
uid: "",
// create empty array and override its type to an array of { providerId: string, uid: string } objects
provider: [] as ({ providerId: string, uid: string })[],
}
});
Du kan också använda ett gränssnitt för att namnge denna objektsform:
interface ProviderData {
providerId: string;
uid: string;
}
// you could also use this similar syntax:
// type ProviderData = {
// providerId: string;
// uid: string;
// }
const state = reactive({
user: {
// initialize as "", the type is automatically set to string
uid: "",
// create empty array and override its type to an array of ProviderData objects
provider: [] as ProviderData[],
}
});
