2015-12-10 42 views
1

下面是我的項目中使用Typescript的代碼片段。傳播opertor in Typescript投擲錯誤

interface List { 
    id: number; 
    name: string; 
    done: boolean; 
}; 

let list = [{id: 0, name: "Vinoj", done: false}, 
     {id: 1, name: "Sandeep", done: true}, 
     {id: 2, name: "Amala", done: true}, 
     {id: 3, name: "Dixy", done: true}, 
     {id: 4, name: "Ajay", done: true}, 
     {id: 5, name: "Ashwin", done: true}, 
     {id: 6, name: "Yashin", done: true}, 
     {id: 7, name: "Mudassir", done: true}, 
     {id: 8, name: "Ishan", done: true}]; 

let listItemId = 2; 

let updatedList:List[] = list.map(item => { 
    if (item.id === listItemId) 
     return {...item, done : !item.done}; 
    return item; 
}); 

這段代碼在播放地拋出錯誤。有人可以告訴我爲什麼嗎?

+1

傳播性質目前是[提案ES2016(https://github.com/tc39/ecma262)。我猜打字稿不支持這個。 –

回答

1

傳播算支持函數調用打字稿,如果你的目標< ES6被編譯爲apply電話 - 但你不能用它來創建對象尚未:

雖然這個例子返回原來的對象,用更新的屬性,我認爲這是你試圖實現:

interface List { 
    id: number; 
    name: string; 
    done: boolean; 
}; 

let list = [ 
    {id: 0, name: "Vinoj", done: false}, 
    {id: 1, name: "Sandeep", done: true}, 
    {id: 2, name: "Amala", done: true}, 
    {id: 3, name: "Dixy", done: true}, 
    {id: 4, name: "Ajay", done: true}, 
    {id: 5, name: "Ashwin", done: true}, 
    {id: 6, name: "Yashin", done: true}, 
    {id: 7, name: "Mudassir", done: true}, 
    {id: 8, name: "Ishan", done: true} 
]; 

let listItemId = 2; 

let updatedList:List[] = list.map(item => { 
    if (item.id === listItemId) { 
     item.done = !item.done 
    } 
    return item; 
}); 

或者你想創建一個新的對象,使用解構:

 if (item.id === listItemId) { 
      let { id, name, done } = item; 
      return { 
       id: id, name: name, done: !done 
      } 
     } 
     return item;