vue.js - Postavljanje tipa podataka u Vue data objektu s Typescript
Trenutno koristim Vue.js s Typescriptom u webpack projektu.
Kao što je navedeno u Preporučenoj konfiguraciji u mojoj tsconfig.json, imam:
"strict": true,Unutar jedne od mojih komponenti imam:
declare interface Player {
cod: string,
param: string
}
export default Vue.extend({
name: 'basecomponent',
data() {
return {
players: []
};
},
created()
let self = this
axios.get('fetch-data')
.then((response) => {
let res: Players[] = response.data;
for(let i = 0; i < res.length; i++){
self.players.push(res[i]);
}
})
.catch((error: string) => {
console.log(error);
});
},
});
ali kada pokušam kompajlirati, dobijem:
error TS2345: Argument of type 'Player' is not assignable to parameter of type 'never'.
Jer vjerujem da players: [] ima never[] tip.
Moje pitanje je: kako mogu zaključiti tip svojstava Vue data objekta?
Odgovor #1
Da nadovežem na Joshuein odgovor, možda biste htjeli deklarirati tip igrača u liniji kako vaš kod ne bi postao previše opširan kako vaši podaci budu veći.
data() {
return {
players: [] as Player[]
};
},
druga opcija:
data() {
return {
players: new Array<Player>()
};
},
Odgovor #2
Ovo bi trebalo raditi:
declare interface Player {
cod: string,
param: string
}
declare interface BaseComponentData {
players: Player[]
}
export default Vue.extend({
name: 'basecomponent',
data(): BaseComponentData {
return {
players: []
};
},
})
Odgovor #3
Vaša metoda data ima nedefiniranu vrijednost povrata.
Ako navedete jedan, TypeScript će znati što očekivati s players.
Samo trebate proširiti liniju data() {.
npr.
data() {
return {
players: []
};
},
treba postati:
data() : {
players: Array<any>, // if possible, replace `any` with something more specific
} {
return {
players: []
};
},
Tada! players sada je tipa Array od any.
Odgovor #4
Pronašao sam drugi način koji je bliži tipičnoj sintaksi, dok kod ostaje kratak.
data() {
return new class {
players: Player[] = []
}();
},
