打字稿抛出错误中的传播操作程序



下面是我使用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;

最新更新