假设我有课Task
和 TaskGroup
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!"});
不完美但有效。
关于javascript - 如何将 Immutable JS 与类型化的 ES6 类一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34746646/