javascript - 如何将 Immutable JS 与类型化的 ES6 类一起使用?

标签 javascript typescript ecmascript-6 angular immutable.js

假设我有课TaskTaskGroup

class Task{
     constructor(public text:string){}
}

class TaskGroup {
    constructor(public title:string = "new task group", public tasks:Task[] = []){}
}

然后在我的 Angular 2 服务中,我将创建一个不可变的任务组列表

@Injectable()
class TaskService {
    taskGroups:Immutable.List<TaskGroup>;

    constructor() {
       this.taskGroups = Immutable.List<TaskGroup>([new TaskGroup("Coding tasks")]);
    }
}

这种方式只有 taskGroups 列表是不可变的。不管里面是什么,它都不是。即使我做 Immutable.fromJS(...)而不是 Immutable.List<Board>(...)嵌套对象是普通的 Javascript 对象。

不可变 JS 不支持类继承(Inheriting from Immutable object with ES6 #562)

//can't do this!
class TaskGroup extends Immutable.Map<string, any>{
    constructor(public title:string = "new task group", public tasks:Task[]){}
}
//it complained about the class not having methods like set, delete etc

那么如何创建不可变类对象呢?

最佳答案

你可以这样做:

const TodoRecord = Immutable.Record({
    id: 0,
    description: "",
    completed: false
});

class Todo extends TodoRecord {
    id:number;
    description:string;
    completed: boolean;

    constructor(props) {
        super(props);
    }
}

let todo:Todo = new Todo({id: 1, description: "I'm Type Safe!"});

不完美但有效。

它来自这篇很棒的博文: https://blog.angular-university.io/angular-2-application-architecture-building-flux-like-apps-using-redux-and-immutable-js-js/

关于javascript - 如何将 Immutable JS 与类型化的 ES6 类一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34746646/

相关文章:

javascript - 从多个选择框中选择时删除 JQuery 选项

javascript - 使用通配符(如 'includes')从 module.exports 对象数组中检索值

angular - 如果每个 observable 都有新数据,我如何才能一次订阅 angular2 中的多个 observable 并等待?

angularjs - 使用 typescript 的 Angular-UI 模态

reactjs - React.PropTypes.func 的默认值是多少

javascript - 如何使用 JavaScript 测试空字符串/null?

javascript - 在 JQuery 而不是 Javascript 中读取所选的 Dropbox 响应

javascript - 如何检查字符串是否只包含一个空格?

ecmascript-6 - ES6 仅部分 params 对象的默认值

javascript - 使用 .sub() 和 react 创建化学式