2016-12-21 2 views
2

Я получаю сообщение об ошибке следовать в моем IDE говоря Property id does not exist on type string typeScript для этой строки кода:Property ID не существует на строкового типа

if(customer.id === id) {//doesn't like customer.id 
      return customer; 
     } 

полный код:

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 ""; 
} 

Это было мое предположение, так как Я использовал any для let customer:any []; Я мог бы поместить туда разные переменные.

----------------- Спасибо за некоторую помощь это мой новый раствор --------

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)); 
+1

Ваше предположение было почти правильным. Функция 'customers' возвращает массив строк ... –

+2

Вероятно, вы хотите' customer.push ({name, id, age, city}); 'Ваше наименование очень и очень запутанно. И вы возвращаете клиента, который имеет тип any [], из функции, тип возврата которой является строкой []. Это не имеет большого смысла. –

ответ

6

Вы должны обернуть свойства внутри объекта:

function createCustomer(name: string, id: number, age: number, city: string) { 
     customer.push({ name, id, age, city }); 
} 

{ name, id, age, city } Где находится ES2015 эквивалентность:

{ 
    id: id, 
    name: name, 
    age: age, 
    city: city 
} 

чтобы избежать такого рода ошибок, я склонен создавать interfac е, что силы структура:

interface ICustomer { 
    id: number; 
    name: string; 
    age: number; 
    city: string; 
} 

который вы назначаете в массив:

let customer: ICustomer[]; 

Кроме лучшей проверки типов, это дает вам более синтаксическую подсказку.


Edit: Я рассмотрел свой код и сделал несколько предложений о практике:

  • Всегда дают тип возврата к функциям
  • Старайтесь не работать на внешних переменных внутри функций, если это необходимо передавать их в качестве параметров
  • Не смешивать определения функций с фактическим кодом

Код стоит более 1000 слов. Реформаторская версия:

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); 
} 
+1

Это помогло больше, чем одному. – Drew1208

Смежные вопросы