Вы можете использовать метод .named(name)
, который клонирует данный тип, дает ему новый name
и предоставляет вам возможность "расширить" его с помощью дополнительных свойств, представлений, действий или, возможно, переопределений объявленных в оригинальном виде.
Пример:
const Square = types
.model("Square",
{
width: types.number
}
)
.views(self => ({
surface() {
return self.width * self.width
}
}))
// create a new type, based on Square
const Box = Square
.named("Box")
.views(self => {
// save the base implementation of surface
const superSurface = self.surface
return {
// super contrived override example!
surface() {
return superSurface() * 1
},
volume() {
return self.surface * self.width
}
}
}))