下面是我使用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;
});
此代码在游戏场中抛出错误。有人能告诉我为什么吗?
有一个悬而未决的问题: 支持 es7 休息/展开属性
我猜它不会很快实施。请参阅评论:
我们希望等待提案进入第 3 阶段,然后再解决此问题。
并请查看规格状态:
https://github.com/sebmarkbage/ecmascript-rest-spread
在 TypeScript 中函数调用支持扩展运算符,如果您的目标是 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;