typescript - Egenskapen id finns inte på typen string
Jag får följande fel i min IDE som säger Property id does not exist on type string typeScript för denna kodrad:
if(customer.id === id) {//doesn't like customer.id
return customer;
}
fullständig kod:
let customer:any [];
function Customers(): string[] {
let id = 0;
createCustomer("Drew",id++,22,"Glassboro");
createCustomer("Mike",id++,40,"Rineyville");
createCustomer("Justin",id++,19,"Jonesboro");
createCustomer("Alex",id++,15,"Paulsboro");
createCustomer("Phil",id++,32,"Glassboro");
return customer;
}
function createCustomer(name:string,id:number,age:number,city:string){
customer.push(name,id,age,city);
}
const allCustomers = Customers();
function getCustomerInformation(id:number): string {
for (let customer of allCustomers) {
if(customer.id === id){
return customer;
}
}
return "";
}
Det var min antagande eftersom jag använde any för let customer:any []; att jag kunde lägga olika variabler där.
----------------- Tack för lite hjälp, detta är min nya lösning--------
interface ICustomer{
id: number;
name: string;
age: number
city: string
}
let customers: Array<ICustomer>;
function generateCustomers(): void {
let id: number = 0;
createCustomer("Drew", id++, 22, "Glassboro");
createCustomer("Mike", id++, 40, "Rineyville");
createCustomer("Justin", id++, 19, "Jonesboro");
createCustomer("Alex", id++, 15, "Paulsboro");
createCustomer("Phil", id++, 32, "Glassboro");
}
function getAllCustomers(): ICustomer[]{
generateCustomers();
return customers;
}
function createCustomer(name:string,id:number,age:number,city:string): void {
let newCustomer:ICustomer = {id:id,name:name,age:age,city:city};
customers.push(newCustomer);
}
const allCustomers = getAllCustomers;
function getCustomerInformation(id:number): ICustomer {
for (let customer of allCustomers()) {
if(customer.id === id){
return customer;
}
}
return null;
}
console.log(getCustomerInformation(1));
Svar #1
Du måste omsluta dina egenskaper i ett objekt:
function createCustomer(name: string, id: number, age: number, city: string) {
customer.push({ name, id, age, city });
}
Där { name, id, age, city } är ES2015-ekvivalensen av:
{
id: id,
name: name,
age: age,
city: city
}
För att undvika den här typen av misstag tenderar jag att skapa ett gränssnitt som tvingar fram struktur:
interface ICustomer {
id: number;
name: string;
age: number;
city: string;
}
som du tilldelar din array:
let customer: ICustomer[];
Förutom bättre typkontroll, ger det dig bättre syntaxtips.
Redigera: Jag har granskat din kod och gjort några förslag om praxis:
- Ge alltid returtyp till funktioner
- Försök att inte arbeta med externa variabler inuti funktioner, om det behövs, skicka dem som parametrar
- Blanda inte funktionsdefinitioner med faktisk kod
Kod värd mer än 1000 ord. Här är en omstrukturerad version:
const allCustomers: ICustomer[] = customers();
interface ICustomer {
id: number;
name: string;
age: number;
city: string;
}
function customers(): ICustomer[] {
let id: number = 0;
return [
createCustomer(id++, "Drew", 22, "Glassboro"),
createCustomer(id++, "Mike", 40, "Rineyville"),
createCustomer(id++, "Justin", 19, "Jonesboro"),
createCustomer(id++, "Alex", 15, "Paulsboro"),
createCustomer(id++, "Phil", 32, "Glassboro")
];
}
function createCustomer(id: number, name: string, age: number, city: string): ICustomer {
return { id, name, age, city };
}
function getCustomerInformation(customers: ICustomer[], id: number): ICustomer {
// Note undefined is returned if object not found
return customers.find(customer => customer.id === id);
}
